{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "64c956bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "import scipy.io"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "c1682ede",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Define the LEMCell\n",
    "class LEMCell(nn.Module):\n",
    "    def __init__(self, ninp, nhid, dt):\n",
    "        super(LEMCell, self).__init__()\n",
    "        self.ninp = ninp\n",
    "        self.nhid = nhid\n",
    "        self.dt = dt\n",
    "        self.inp2hid = nn.Linear(ninp, 4 * nhid)\n",
    "        self.hid2hid = nn.Linear(nhid, 3 * nhid)\n",
    "        self.transform_z = nn.Linear(nhid, nhid)\n",
    "        self.reset_parameters()\n",
    "\n",
    "    def reset_parameters(self):\n",
    "        std = 1.0 / np.sqrt(self.nhid)\n",
    "        for w in self.parameters():\n",
    "            w.data.uniform_(-std, std)\n",
    "\n",
    "    def forward(self, x, y, z):\n",
    "        transformed_inp = self.inp2hid(x)\n",
    "        transformed_hid = self.hid2hid(y)\n",
    "        i_dt1, i_dt2, i_z, i_y = transformed_inp.chunk(4, 1)\n",
    "        h_dt1, h_dt2, h_y = transformed_hid.chunk(3, 1)\n",
    "\n",
    "        ms_dt_bar = self.dt * torch.sigmoid(i_dt1 + h_dt1)\n",
    "        ms_dt = self.dt * torch.sigmoid(i_dt2 + h_dt2)\n",
    "\n",
    "        z = (1. - ms_dt) * z + ms_dt * torch.tanh(i_y + h_y)\n",
    "        y = (1. - ms_dt_bar) * y + ms_dt_bar * torch.tanh(self.transform_z(z) + i_z)\n",
    "\n",
    "        return y, z\n",
    "\n",
    "# Define the LEM model\n",
    "class LEM(nn.Module):\n",
    "    def __init__(self, ninp, nhid, nout, dt=1.):\n",
    "        super(LEM, self).__init__()\n",
    "        self.nhid = nhid\n",
    "        self.cell = LEMCell(ninp, nhid, dt)\n",
    "        self.classifier = nn.Linear(nhid, nout)\n",
    "        self.init_weights()\n",
    "\n",
    "    def init_weights(self):\n",
    "        for name, param in self.named_parameters():\n",
    "            if 'classifier' in name and 'weight' in name:\n",
    "                nn.init.kaiming_normal_(param.data)\n",
    "\n",
    "    def forward(self, input):\n",
    "        y = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        z = input.data.new(input.size(1), self.nhid).zero_()\n",
    "        for x in input:\n",
    "            y, z = self.cell(x, y, z)\n",
    "        out = self.classifier(y)\n",
    "        return out\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "a982afa5",
   "metadata": {},
   "source": [
    "### PINN data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "79da65b0",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burg.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u = mat_data['u1']\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "bbac9f8e",
   "metadata": {},
   "source": [
    "### Exact Solution data importing"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "9967dbae",
   "metadata": {},
   "outputs": [],
   "source": [
    "# importing data\n",
    "\n",
    "import torch\n",
    "import torch.nn as nn\n",
    "import numpy as np\n",
    "import time\n",
    "import scipy.io\n",
    "\n",
    "# Load the .mat file\n",
    "mat_data = scipy.io.loadmat('burgers_shock.mat')\n",
    "\n",
    "# Access the variables stored in the .mat file\n",
    "# The variable names in the .mat file become keys in the loaded dictionary\n",
    "x = mat_data['x']\n",
    "t = mat_data['t']\n",
    "u_1 = mat_data['usol']\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "83a01b14",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(256, 100)"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Set random seed for reproducibility\n",
    "#torch.manual_seed(42)\n",
    "\n",
    "# Toy problem data\n",
    "input_size = 256\n",
    "hidden_size = 32\n",
    "output_size = 256\n",
    "sequence_length = 79\n",
    "batch_size = 1\n",
    "num_epochs = 20000\n",
    "\n",
    "# Set random seed for reproducibility\n",
    "#torch.manual_seed(42)\n",
    "u[:, 0:100].shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "0496e4a4",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "test data shape (256,)\n",
      "input data shape (256, 79)\n",
      "Target data shape (256, 79)\n",
      "input tensor shape torch.Size([1, 79, 256])\n",
      "Target tensor shape torch.Size([1, 79, 256])\n"
     ]
    }
   ],
   "source": [
    "input_data = u[:,0:79]\n",
    "target_data = u[:,1:80]\n",
    "\n",
    "test_data = u[:,79]\n",
    "#test_target = u[:,80:100]\n",
    "\n",
    "print(\"test data shape\", test_data.shape)\n",
    "#print(\"test target shape\", test_target.shape)\n",
    "\n",
    "print(\"input data shape\",input_data.shape)\n",
    "print(\"Target data shape\",target_data.shape)\n",
    "\n",
    "# Convert data to tensors\n",
    "input_tensor = torch.tensor(input_data.T).view(batch_size, sequence_length, input_size).float()\n",
    "target_tensor = torch.tensor(target_data.T).view(batch_size, sequence_length, output_size).float()\n",
    "\n",
    "print(\"input tensor shape\",input_tensor.shape)\n",
    "print(\"Target tensor shape\",target_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "718d5b86",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Convert test data to tensors\n",
    "test_tensor = torch.tensor(test_data.T).view(batch_size, 1, input_size).float()\n",
    "#test_target_tensor = torch.tensor(test_target.T).view(batch_size, 20, output_size).float()\n",
    "target_tensor = torch.squeeze(target_tensor)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "d733ab9a",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 10/20000, Loss: 0.3723836243152618\n",
      "Epoch: 20/20000, Loss: 0.3186952471733093\n",
      "Epoch: 30/20000, Loss: 0.2613539397716522\n",
      "Epoch: 40/20000, Loss: 0.2024728804826736\n",
      "Epoch: 50/20000, Loss: 0.1497684866189957\n",
      "Epoch: 60/20000, Loss: 0.1076712161302567\n",
      "Epoch: 70/20000, Loss: 0.0766476094722748\n",
      "Epoch: 80/20000, Loss: 0.0554979890584946\n",
      "Epoch: 90/20000, Loss: 0.0421221479773521\n",
      "Epoch: 100/20000, Loss: 0.0340989194810390\n",
      "Epoch: 110/20000, Loss: 0.0292407870292664\n",
      "Epoch: 120/20000, Loss: 0.0261520277708769\n",
      "Epoch: 130/20000, Loss: 0.0240727886557579\n",
      "Epoch: 140/20000, Loss: 0.0225642379373312\n",
      "Epoch: 150/20000, Loss: 0.0213899798691273\n",
      "Epoch: 160/20000, Loss: 0.0204122308641672\n",
      "Epoch: 170/20000, Loss: 0.0195362363010645\n",
      "Epoch: 180/20000, Loss: 0.0187038127332926\n",
      "Epoch: 190/20000, Loss: 0.0178971346467733\n",
      "Epoch: 200/20000, Loss: 0.0170822050422430\n",
      "Epoch: 210/20000, Loss: 0.0162416473031044\n",
      "Epoch: 220/20000, Loss: 0.0154027044773102\n",
      "Epoch: 230/20000, Loss: 0.0145623609423637\n",
      "Epoch: 240/20000, Loss: 0.0137281445786357\n",
      "Epoch: 250/20000, Loss: 0.0129050156101584\n",
      "Epoch: 260/20000, Loss: 0.0120991859585047\n",
      "Epoch: 270/20000, Loss: 0.0113166794180870\n",
      "Epoch: 280/20000, Loss: 0.0105614680796862\n",
      "Epoch: 290/20000, Loss: 0.0098365740850568\n",
      "Epoch: 300/20000, Loss: 0.0091478563845158\n",
      "Epoch: 310/20000, Loss: 0.0085044484585524\n",
      "Epoch: 320/20000, Loss: 0.0079048294574022\n",
      "Epoch: 330/20000, Loss: 0.0073476848192513\n",
      "Epoch: 340/20000, Loss: 0.0068317186087370\n",
      "Epoch: 350/20000, Loss: 0.0063561797142029\n",
      "Epoch: 360/20000, Loss: 0.0059189354069531\n",
      "Epoch: 370/20000, Loss: 0.0055178296752274\n",
      "Epoch: 380/20000, Loss: 0.0051505183801055\n",
      "Epoch: 390/20000, Loss: 0.0048144697211683\n",
      "Epoch: 400/20000, Loss: 0.0045071127824485\n",
      "Epoch: 410/20000, Loss: 0.0042258929461241\n",
      "Epoch: 420/20000, Loss: 0.0039683640934527\n",
      "Epoch: 430/20000, Loss: 0.0037322742864490\n",
      "Epoch: 440/20000, Loss: 0.0035156831145287\n",
      "Epoch: 450/20000, Loss: 0.0033172527328134\n",
      "Epoch: 460/20000, Loss: 0.0031352236401290\n",
      "Epoch: 470/20000, Loss: 0.0029684989713132\n",
      "Epoch: 480/20000, Loss: 0.0028156028129160\n",
      "Epoch: 490/20000, Loss: 0.0026744569186121\n",
      "Epoch: 500/20000, Loss: 0.0025431471876800\n",
      "Epoch: 510/20000, Loss: 0.0024226182140410\n",
      "Epoch: 520/20000, Loss: 0.0023131843190640\n",
      "Epoch: 530/20000, Loss: 0.0022132566664368\n",
      "Epoch: 540/20000, Loss: 0.0021214846055955\n",
      "Epoch: 550/20000, Loss: 0.0020368511322886\n",
      "Epoch: 560/20000, Loss: 0.0019585208501667\n",
      "Epoch: 570/20000, Loss: 0.0018858289113268\n",
      "Epoch: 580/20000, Loss: 0.0018184084910899\n",
      "Epoch: 590/20000, Loss: 0.0017550927586854\n",
      "Epoch: 600/20000, Loss: 0.0016960301436484\n",
      "Epoch: 610/20000, Loss: 0.0016408002702519\n",
      "Epoch: 620/20000, Loss: 0.0015890203649178\n",
      "Epoch: 630/20000, Loss: 0.0015404057921842\n",
      "Epoch: 640/20000, Loss: 0.0014947118470445\n",
      "Epoch: 650/20000, Loss: 0.0014517107047141\n",
      "Epoch: 660/20000, Loss: 0.0014111816417426\n",
      "Epoch: 670/20000, Loss: 0.0013729059137404\n",
      "Epoch: 680/20000, Loss: 0.0013366561615840\n",
      "Epoch: 690/20000, Loss: 0.0013021809281781\n",
      "Epoch: 700/20000, Loss: 0.0012691905722022\n",
      "Epoch: 710/20000, Loss: 0.0012374161742628\n",
      "Epoch: 720/20000, Loss: 0.0012069625081494\n",
      "Epoch: 730/20000, Loss: 0.0011784813832492\n",
      "Epoch: 740/20000, Loss: 0.0011520134285092\n",
      "Epoch: 750/20000, Loss: 0.0011267774971202\n",
      "Epoch: 760/20000, Loss: 0.0011031182948500\n",
      "Epoch: 770/20000, Loss: 0.0010804302291945\n",
      "Epoch: 780/20000, Loss: 0.0010589070152491\n",
      "Epoch: 790/20000, Loss: 0.0010383023181930\n",
      "Epoch: 800/20000, Loss: 0.0010185778373852\n",
      "Epoch: 810/20000, Loss: 0.0009996511507779\n",
      "Epoch: 820/20000, Loss: 0.0009814667282626\n",
      "Epoch: 830/20000, Loss: 0.0009639725321904\n",
      "Epoch: 840/20000, Loss: 0.0009471190278418\n",
      "Epoch: 850/20000, Loss: 0.0009308585431427\n",
      "Epoch: 860/20000, Loss: 0.0009151461417787\n",
      "Epoch: 870/20000, Loss: 0.0008999390411191\n",
      "Epoch: 880/20000, Loss: 0.0008851983002387\n",
      "Epoch: 890/20000, Loss: 0.0008708882960491\n",
      "Epoch: 900/20000, Loss: 0.0008570451755077\n",
      "Epoch: 910/20000, Loss: 0.0008435851777904\n",
      "Epoch: 920/20000, Loss: 0.0008304112707265\n",
      "Epoch: 930/20000, Loss: 0.0008173393434845\n",
      "Epoch: 940/20000, Loss: 0.0008047576993704\n",
      "Epoch: 950/20000, Loss: 0.0007924166857265\n",
      "Epoch: 960/20000, Loss: 0.0007803384796716\n",
      "Epoch: 970/20000, Loss: 0.0007684984593652\n",
      "Epoch: 980/20000, Loss: 0.0007568871369585\n",
      "Epoch: 990/20000, Loss: 0.0007454932783730\n",
      "Epoch: 1000/20000, Loss: 0.0007343111792579\n",
      "Epoch: 1010/20000, Loss: 0.0007233358337544\n",
      "Epoch: 1020/20000, Loss: 0.0007125625270419\n",
      "Epoch: 1030/20000, Loss: 0.0007019860786386\n",
      "Epoch: 1040/20000, Loss: 0.0006916013662703\n",
      "Epoch: 1050/20000, Loss: 0.0006814586813562\n",
      "Epoch: 1060/20000, Loss: 0.0006722155376337\n",
      "Epoch: 1070/20000, Loss: 0.0006617837934755\n",
      "Epoch: 1080/20000, Loss: 0.0006518886657432\n",
      "Epoch: 1090/20000, Loss: 0.0006424334133044\n",
      "Epoch: 1100/20000, Loss: 0.0006330612814054\n",
      "Epoch: 1110/20000, Loss: 0.0006238710484467\n",
      "Epoch: 1120/20000, Loss: 0.0006148239481263\n",
      "Epoch: 1130/20000, Loss: 0.0006059206789359\n",
      "Epoch: 1140/20000, Loss: 0.0005971496575512\n",
      "Epoch: 1150/20000, Loss: 0.0005885068094358\n",
      "Epoch: 1160/20000, Loss: 0.0005799878272228\n",
      "Epoch: 1170/20000, Loss: 0.0005715894512832\n",
      "Epoch: 1180/20000, Loss: 0.0005633817054331\n",
      "Epoch: 1190/20000, Loss: 0.0005564893945120\n",
      "Epoch: 1200/20000, Loss: 0.0005471961922012\n",
      "Epoch: 1210/20000, Loss: 0.0005392663879320\n",
      "Epoch: 1220/20000, Loss: 0.0005313350120559\n",
      "Epoch: 1230/20000, Loss: 0.0005235813441686\n",
      "Epoch: 1240/20000, Loss: 0.0005159128922969\n",
      "Epoch: 1250/20000, Loss: 0.0005083612632006\n",
      "Epoch: 1260/20000, Loss: 0.0005009025917388\n",
      "Epoch: 1270/20000, Loss: 0.0004935342003591\n",
      "Epoch: 1280/20000, Loss: 0.0004862517234869\n",
      "Epoch: 1290/20000, Loss: 0.0004790685197804\n",
      "Epoch: 1300/20000, Loss: 0.0004732208326459\n",
      "Epoch: 1310/20000, Loss: 0.0004658433899749\n",
      "Epoch: 1320/20000, Loss: 0.0004581866669469\n",
      "Epoch: 1330/20000, Loss: 0.0004512180166785\n",
      "Epoch: 1340/20000, Loss: 0.0004444541118573\n",
      "Epoch: 1350/20000, Loss: 0.0004377361328807\n",
      "Epoch: 1360/20000, Loss: 0.0004311595403124\n",
      "Epoch: 1370/20000, Loss: 0.0004246891767252\n",
      "Epoch: 1380/20000, Loss: 0.0004183150304016\n",
      "Epoch: 1390/20000, Loss: 0.0004120448429603\n",
      "Epoch: 1400/20000, Loss: 0.0004059411003254\n",
      "Epoch: 1410/20000, Loss: 0.0004026302194688\n",
      "Epoch: 1420/20000, Loss: 0.0003950359823648\n",
      "Epoch: 1430/20000, Loss: 0.0003880583390128\n",
      "Epoch: 1440/20000, Loss: 0.0003821579739451\n",
      "Epoch: 1450/20000, Loss: 0.0003764779248741\n",
      "Epoch: 1460/20000, Loss: 0.0003708538715728\n",
      "Epoch: 1470/20000, Loss: 0.0003653272869997\n",
      "Epoch: 1480/20000, Loss: 0.0003599065530580\n",
      "Epoch: 1490/20000, Loss: 0.0003545744402800\n",
      "Epoch: 1500/20000, Loss: 0.0003496970457491\n",
      "Epoch: 1510/20000, Loss: 0.0003465275513008\n",
      "Epoch: 1520/20000, Loss: 0.0003393620136194\n",
      "Epoch: 1530/20000, Loss: 0.0003340601397213\n",
      "Epoch: 1540/20000, Loss: 0.0003291693283245\n",
      "Epoch: 1550/20000, Loss: 0.0003243232495151\n",
      "Epoch: 1560/20000, Loss: 0.0003195750468876\n",
      "Epoch: 1570/20000, Loss: 0.0003149209660478\n",
      "Epoch: 1580/20000, Loss: 0.0003103462513536\n",
      "Epoch: 1590/20000, Loss: 0.0003061542520300\n",
      "Epoch: 1600/20000, Loss: 0.0003054981643800\n",
      "Epoch: 1610/20000, Loss: 0.0002983153681271\n",
      "Epoch: 1620/20000, Loss: 0.0002930672781076\n",
      "Epoch: 1630/20000, Loss: 0.0002886588335969\n",
      "Epoch: 1640/20000, Loss: 0.0002845225099009\n",
      "Epoch: 1650/20000, Loss: 0.0002804737014230\n",
      "Epoch: 1660/20000, Loss: 0.0002764633391052\n",
      "Epoch: 1670/20000, Loss: 0.0002725791709963\n",
      "Epoch: 1680/20000, Loss: 0.0002689862740226\n",
      "Epoch: 1690/20000, Loss: 0.0002711676934268\n",
      "Epoch: 1700/20000, Loss: 0.0002634605916683\n",
      "Epoch: 1710/20000, Loss: 0.0002579405263532\n",
      "Epoch: 1720/20000, Loss: 0.0002541606081650\n",
      "Epoch: 1730/20000, Loss: 0.0002507067692932\n",
      "Epoch: 1740/20000, Loss: 0.0002472736232448\n",
      "Epoch: 1750/20000, Loss: 0.0002439158561174\n",
      "Epoch: 1760/20000, Loss: 0.0002406437561149\n",
      "Epoch: 1770/20000, Loss: 0.0002374147006776\n",
      "Epoch: 1780/20000, Loss: 0.0002342705120100\n",
      "Epoch: 1790/20000, Loss: 0.0002319719205843\n",
      "Epoch: 1800/20000, Loss: 0.0002321844658582\n",
      "Epoch: 1810/20000, Loss: 0.0002253285201732\n",
      "Epoch: 1820/20000, Loss: 0.0002231156831840\n",
      "Epoch: 1830/20000, Loss: 0.0002194101980422\n",
      "Epoch: 1840/20000, Loss: 0.0002166341873817\n",
      "Epoch: 1850/20000, Loss: 0.0002138836571248\n",
      "Epoch: 1860/20000, Loss: 0.0002111667854479\n",
      "Epoch: 1870/20000, Loss: 0.0002085148735205\n",
      "Epoch: 1880/20000, Loss: 0.0002059218095383\n",
      "Epoch: 1890/20000, Loss: 0.0002033889031736\n",
      "Epoch: 1900/20000, Loss: 0.0002009084419115\n",
      "Epoch: 1910/20000, Loss: 0.0001986204588320\n",
      "Epoch: 1920/20000, Loss: 0.0002034433418885\n",
      "Epoch: 1930/20000, Loss: 0.0001978217333090\n",
      "Epoch: 1940/20000, Loss: 0.0001919299684232\n",
      "Epoch: 1950/20000, Loss: 0.0001894250162877\n",
      "Epoch: 1960/20000, Loss: 0.0001872370921774\n",
      "Epoch: 1970/20000, Loss: 0.0001849111431511\n",
      "Epoch: 1980/20000, Loss: 0.0001827629021136\n",
      "Epoch: 1990/20000, Loss: 0.0001806898071663\n",
      "Epoch: 2000/20000, Loss: 0.0001786606007954\n",
      "Epoch: 2010/20000, Loss: 0.0001766658388078\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 2020/20000, Loss: 0.0001747199858073\n",
      "Epoch: 2030/20000, Loss: 0.0001728378556436\n",
      "Epoch: 2040/20000, Loss: 0.0001722495944705\n",
      "Epoch: 2050/20000, Loss: 0.0001732510572765\n",
      "Epoch: 2060/20000, Loss: 0.0001676844112808\n",
      "Epoch: 2070/20000, Loss: 0.0001666480820859\n",
      "Epoch: 2080/20000, Loss: 0.0001638687244849\n",
      "Epoch: 2090/20000, Loss: 0.0001622217096156\n",
      "Epoch: 2100/20000, Loss: 0.0001605589932296\n",
      "Epoch: 2110/20000, Loss: 0.0001589059829712\n",
      "Epoch: 2120/20000, Loss: 0.0001573022309458\n",
      "Epoch: 2130/20000, Loss: 0.0001557369105285\n",
      "Epoch: 2140/20000, Loss: 0.0001542125974083\n",
      "Epoch: 2150/20000, Loss: 0.0001527155545773\n",
      "Epoch: 2160/20000, Loss: 0.0001512546441518\n",
      "Epoch: 2170/20000, Loss: 0.0001500795187894\n",
      "Epoch: 2180/20000, Loss: 0.0001640897535253\n",
      "Epoch: 2190/20000, Loss: 0.0001508787245257\n",
      "Epoch: 2200/20000, Loss: 0.0001470756251365\n",
      "Epoch: 2210/20000, Loss: 0.0001444886293029\n",
      "Epoch: 2220/20000, Loss: 0.0001433460856788\n",
      "Epoch: 2230/20000, Loss: 0.0001418323372491\n",
      "Epoch: 2240/20000, Loss: 0.0001405821822118\n",
      "Epoch: 2250/20000, Loss: 0.0001393609709339\n",
      "Epoch: 2260/20000, Loss: 0.0001381543697789\n",
      "Epoch: 2270/20000, Loss: 0.0001369773526676\n",
      "Epoch: 2280/20000, Loss: 0.0001358252920909\n",
      "Epoch: 2290/20000, Loss: 0.0001346961362287\n",
      "Epoch: 2300/20000, Loss: 0.0001335903070867\n",
      "Epoch: 2310/20000, Loss: 0.0001325062330579\n",
      "Epoch: 2320/20000, Loss: 0.0001314595720032\n",
      "Epoch: 2330/20000, Loss: 0.0001315853587585\n",
      "Epoch: 2340/20000, Loss: 0.0001393683633069\n",
      "Epoch: 2350/20000, Loss: 0.0001297125127167\n",
      "Epoch: 2360/20000, Loss: 0.0001282026787521\n",
      "Epoch: 2370/20000, Loss: 0.0001269709027838\n",
      "Epoch: 2380/20000, Loss: 0.0001255449169548\n",
      "Epoch: 2390/20000, Loss: 0.0001246444735443\n",
      "Epoch: 2400/20000, Loss: 0.0001236990356119\n",
      "Epoch: 2410/20000, Loss: 0.0001227820903296\n",
      "Epoch: 2420/20000, Loss: 0.0001219051409862\n",
      "Epoch: 2430/20000, Loss: 0.0001210455739056\n",
      "Epoch: 2440/20000, Loss: 0.0001202020939672\n",
      "Epoch: 2450/20000, Loss: 0.0001193742500618\n",
      "Epoch: 2460/20000, Loss: 0.0001185608780361\n",
      "Epoch: 2470/20000, Loss: 0.0001177627927973\n",
      "Epoch: 2480/20000, Loss: 0.0001169800016214\n",
      "Epoch: 2490/20000, Loss: 0.0001162585976999\n",
      "Epoch: 2500/20000, Loss: 0.0001215536758536\n",
      "Epoch: 2510/20000, Loss: 0.0001190597249661\n",
      "Epoch: 2520/20000, Loss: 0.0001149707968580\n",
      "Epoch: 2530/20000, Loss: 0.0001148494484369\n",
      "Epoch: 2540/20000, Loss: 0.0001129982629209\n",
      "Epoch: 2550/20000, Loss: 0.0001119087319239\n",
      "Epoch: 2560/20000, Loss: 0.0001113061225624\n",
      "Epoch: 2570/20000, Loss: 0.0001105630435632\n",
      "Epoch: 2580/20000, Loss: 0.0001099178407458\n",
      "Epoch: 2590/20000, Loss: 0.0001092641323339\n",
      "Epoch: 2600/20000, Loss: 0.0001086291231331\n",
      "Epoch: 2610/20000, Loss: 0.0001080061410903\n",
      "Epoch: 2620/20000, Loss: 0.0001073932144209\n",
      "Epoch: 2630/20000, Loss: 0.0001067902121576\n",
      "Epoch: 2640/20000, Loss: 0.0001061969232978\n",
      "Epoch: 2650/20000, Loss: 0.0001056129840435\n",
      "Epoch: 2660/20000, Loss: 0.0001050382634276\n",
      "Epoch: 2670/20000, Loss: 0.0001044725941028\n",
      "Epoch: 2680/20000, Loss: 0.0001039213311742\n",
      "Epoch: 2690/20000, Loss: 0.0001040700881276\n",
      "Epoch: 2700/20000, Loss: 0.0001307570491917\n",
      "Epoch: 2710/20000, Loss: 0.0001048994599842\n",
      "Epoch: 2720/20000, Loss: 0.0001018065959215\n",
      "Epoch: 2730/20000, Loss: 0.0001015803936752\n",
      "Epoch: 2740/20000, Loss: 0.0001011272834148\n",
      "Epoch: 2750/20000, Loss: 0.0001004094374366\n",
      "Epoch: 2760/20000, Loss: 0.0000997881143121\n",
      "Epoch: 2770/20000, Loss: 0.0000993169232970\n",
      "Epoch: 2780/20000, Loss: 0.0000988221872831\n",
      "Epoch: 2790/20000, Loss: 0.0000983498321148\n",
      "Epoch: 2800/20000, Loss: 0.0000978802490863\n",
      "Epoch: 2810/20000, Loss: 0.0000974193098955\n",
      "Epoch: 2820/20000, Loss: 0.0000969643297140\n",
      "Epoch: 2830/20000, Loss: 0.0000965150829870\n",
      "Epoch: 2840/20000, Loss: 0.0000960714969551\n",
      "Epoch: 2850/20000, Loss: 0.0000956333678914\n",
      "Epoch: 2860/20000, Loss: 0.0000952006084844\n",
      "Epoch: 2870/20000, Loss: 0.0000947729859035\n",
      "Epoch: 2880/20000, Loss: 0.0000943504055613\n",
      "Epoch: 2890/20000, Loss: 0.0000939329474932\n",
      "Epoch: 2900/20000, Loss: 0.0000935396019486\n",
      "Epoch: 2910/20000, Loss: 0.0000964672435657\n",
      "Epoch: 2920/20000, Loss: 0.0000928066001507\n",
      "Epoch: 2930/20000, Loss: 0.0000964469290921\n",
      "Epoch: 2940/20000, Loss: 0.0000942424740060\n",
      "Epoch: 2950/20000, Loss: 0.0000925461645238\n",
      "Epoch: 2960/20000, Loss: 0.0000915006821742\n",
      "Epoch: 2970/20000, Loss: 0.0000908368019736\n",
      "Epoch: 2980/20000, Loss: 0.0000904157568584\n",
      "Epoch: 2990/20000, Loss: 0.0000900554514374\n",
      "Epoch: 3000/20000, Loss: 0.0000896704368643\n",
      "Epoch: 3010/20000, Loss: 0.0000893031465239\n",
      "Epoch: 3020/20000, Loss: 0.0000889376751729\n",
      "Epoch: 3030/20000, Loss: 0.0000885772751644\n",
      "Epoch: 3040/20000, Loss: 0.0000882195454324\n",
      "Epoch: 3050/20000, Loss: 0.0000878649443621\n",
      "Epoch: 3060/20000, Loss: 0.0000875133846421\n",
      "Epoch: 3070/20000, Loss: 0.0000871646407177\n",
      "Epoch: 3080/20000, Loss: 0.0000868186471052\n",
      "Epoch: 3090/20000, Loss: 0.0000864753019414\n",
      "Epoch: 3100/20000, Loss: 0.0000861345470184\n",
      "Epoch: 3110/20000, Loss: 0.0000857963095768\n",
      "Epoch: 3120/20000, Loss: 0.0000854604950291\n",
      "Epoch: 3130/20000, Loss: 0.0000851302247611\n",
      "Epoch: 3140/20000, Loss: 0.0000852839584695\n",
      "Epoch: 3150/20000, Loss: 0.0001321141025983\n",
      "Epoch: 3160/20000, Loss: 0.0000854995887494\n",
      "Epoch: 3170/20000, Loss: 0.0000838820924400\n",
      "Epoch: 3180/20000, Loss: 0.0000835399114294\n",
      "Epoch: 3190/20000, Loss: 0.0000832471778267\n",
      "Epoch: 3200/20000, Loss: 0.0000829621785670\n",
      "Epoch: 3210/20000, Loss: 0.0000826441028039\n",
      "Epoch: 3220/20000, Loss: 0.0000822910296847\n",
      "Epoch: 3230/20000, Loss: 0.0000819536071504\n",
      "Epoch: 3240/20000, Loss: 0.0000816448009573\n",
      "Epoch: 3250/20000, Loss: 0.0000813339429442\n",
      "Epoch: 3260/20000, Loss: 0.0000810261990409\n",
      "Epoch: 3270/20000, Loss: 0.0000807197939139\n",
      "Epoch: 3280/20000, Loss: 0.0000804151568445\n",
      "Epoch: 3290/20000, Loss: 0.0000801117494120\n",
      "Epoch: 3300/20000, Loss: 0.0000798096443759\n",
      "Epoch: 3310/20000, Loss: 0.0000795087253209\n",
      "Epoch: 3320/20000, Loss: 0.0000792089704191\n",
      "Epoch: 3330/20000, Loss: 0.0000789103432908\n",
      "Epoch: 3340/20000, Loss: 0.0000786128002801\n",
      "Epoch: 3350/20000, Loss: 0.0000783162176958\n",
      "Epoch: 3360/20000, Loss: 0.0000780206610216\n",
      "Epoch: 3370/20000, Loss: 0.0000777264722274\n",
      "Epoch: 3380/20000, Loss: 0.0000774745130911\n",
      "Epoch: 3390/20000, Loss: 0.0000849304633448\n",
      "Epoch: 3400/20000, Loss: 0.0000859331776155\n",
      "Epoch: 3410/20000, Loss: 0.0000766470329836\n",
      "Epoch: 3420/20000, Loss: 0.0000763553471188\n",
      "Epoch: 3430/20000, Loss: 0.0000761109549785\n",
      "Epoch: 3440/20000, Loss: 0.0000758546084398\n",
      "Epoch: 3450/20000, Loss: 0.0000755532018957\n",
      "Epoch: 3460/20000, Loss: 0.0000752051855670\n",
      "Epoch: 3470/20000, Loss: 0.0000748752790969\n",
      "Epoch: 3480/20000, Loss: 0.0000745901343180\n",
      "Epoch: 3490/20000, Loss: 0.0000743046839489\n",
      "Epoch: 3500/20000, Loss: 0.0000740192990634\n",
      "Epoch: 3510/20000, Loss: 0.0000737357113394\n",
      "Epoch: 3520/20000, Loss: 0.0000734527129680\n",
      "Epoch: 3530/20000, Loss: 0.0000731699619791\n",
      "Epoch: 3540/20000, Loss: 0.0000728876839275\n",
      "Epoch: 3550/20000, Loss: 0.0000726057041902\n",
      "Epoch: 3560/20000, Loss: 0.0000723240154912\n",
      "Epoch: 3570/20000, Loss: 0.0000720425960026\n",
      "Epoch: 3580/20000, Loss: 0.0000717613947927\n",
      "Epoch: 3590/20000, Loss: 0.0000714804191375\n",
      "Epoch: 3600/20000, Loss: 0.0000711996253813\n",
      "Epoch: 3610/20000, Loss: 0.0000709190135240\n",
      "Epoch: 3620/20000, Loss: 0.0000706397040631\n",
      "Epoch: 3630/20000, Loss: 0.0000705488491803\n",
      "Epoch: 3640/20000, Loss: 0.0001112495592679\n",
      "Epoch: 3650/20000, Loss: 0.0000758725727792\n",
      "Epoch: 3660/20000, Loss: 0.0000719237577869\n",
      "Epoch: 3670/20000, Loss: 0.0000696984934621\n",
      "Epoch: 3680/20000, Loss: 0.0000690704982844\n",
      "Epoch: 3690/20000, Loss: 0.0000687513893354\n",
      "Epoch: 3700/20000, Loss: 0.0000684727492626\n",
      "Epoch: 3710/20000, Loss: 0.0000681966848788\n",
      "Epoch: 3720/20000, Loss: 0.0000679125732859\n",
      "Epoch: 3730/20000, Loss: 0.0000676241252222\n",
      "Epoch: 3740/20000, Loss: 0.0000673423201079\n",
      "Epoch: 3750/20000, Loss: 0.0000670651643304\n",
      "Epoch: 3760/20000, Loss: 0.0000667866333970\n",
      "Epoch: 3770/20000, Loss: 0.0000665086772642\n",
      "Epoch: 3780/20000, Loss: 0.0000662304591970\n",
      "Epoch: 3790/20000, Loss: 0.0000659521756461\n",
      "Epoch: 3800/20000, Loss: 0.0000656737538520\n",
      "Epoch: 3810/20000, Loss: 0.0000653951283311\n",
      "Epoch: 3820/20000, Loss: 0.0000651163281873\n",
      "Epoch: 3830/20000, Loss: 0.0000648373461445\n",
      "Epoch: 3840/20000, Loss: 0.0000645581530989\n",
      "Epoch: 3850/20000, Loss: 0.0000642786981189\n",
      "Epoch: 3860/20000, Loss: 0.0000639990394120\n",
      "Epoch: 3870/20000, Loss: 0.0000637191478745\n",
      "Epoch: 3880/20000, Loss: 0.0000634391763015\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 3890/20000, Loss: 0.0000631739385426\n",
      "Epoch: 3900/20000, Loss: 0.0000659555953462\n",
      "Epoch: 3910/20000, Loss: 0.0000660851073917\n",
      "Epoch: 3920/20000, Loss: 0.0000689640874043\n",
      "Epoch: 3930/20000, Loss: 0.0000641512669972\n",
      "Epoch: 3940/20000, Loss: 0.0000623614396318\n",
      "Epoch: 3950/20000, Loss: 0.0000617215264356\n",
      "Epoch: 3960/20000, Loss: 0.0000613492011325\n",
      "Epoch: 3970/20000, Loss: 0.0000610276583757\n",
      "Epoch: 3980/20000, Loss: 0.0000607124638918\n",
      "Epoch: 3990/20000, Loss: 0.0000604095912422\n",
      "Epoch: 4000/20000, Loss: 0.0000601257306698\n",
      "Epoch: 4010/20000, Loss: 0.0000598456172156\n",
      "Epoch: 4020/20000, Loss: 0.0000595631245233\n",
      "Epoch: 4030/20000, Loss: 0.0000592818178120\n",
      "Epoch: 4040/20000, Loss: 0.0000589998999203\n",
      "Epoch: 4050/20000, Loss: 0.0000587178619753\n",
      "Epoch: 4060/20000, Loss: 0.0000584355511819\n",
      "Epoch: 4070/20000, Loss: 0.0000581529420742\n",
      "Epoch: 4080/20000, Loss: 0.0000578700346523\n",
      "Epoch: 4090/20000, Loss: 0.0000575868471060\n",
      "Epoch: 4100/20000, Loss: 0.0000573034121771\n",
      "Epoch: 4110/20000, Loss: 0.0000570196643821\n",
      "Epoch: 4120/20000, Loss: 0.0000567356401007\n",
      "Epoch: 4130/20000, Loss: 0.0000564513466088\n",
      "Epoch: 4140/20000, Loss: 0.0000561668020964\n",
      "Epoch: 4150/20000, Loss: 0.0000558827741770\n",
      "Epoch: 4160/20000, Loss: 0.0000557586936338\n",
      "Epoch: 4170/20000, Loss: 0.0000995904629235\n",
      "Epoch: 4180/20000, Loss: 0.0000595906749368\n",
      "Epoch: 4190/20000, Loss: 0.0000549900905753\n",
      "Epoch: 4200/20000, Loss: 0.0000551293269382\n",
      "Epoch: 4210/20000, Loss: 0.0000550287149963\n",
      "Epoch: 4220/20000, Loss: 0.0000543477726751\n",
      "Epoch: 4230/20000, Loss: 0.0000538144522579\n",
      "Epoch: 4240/20000, Loss: 0.0000534364262421\n",
      "Epoch: 4250/20000, Loss: 0.0000531193400093\n",
      "Epoch: 4260/20000, Loss: 0.0000528222662979\n",
      "Epoch: 4270/20000, Loss: 0.0000525332761754\n",
      "Epoch: 4280/20000, Loss: 0.0000522484333487\n",
      "Epoch: 4290/20000, Loss: 0.0000519646164321\n",
      "Epoch: 4300/20000, Loss: 0.0000516803156643\n",
      "Epoch: 4310/20000, Loss: 0.0000513961167599\n",
      "Epoch: 4320/20000, Loss: 0.0000511118596478\n",
      "Epoch: 4330/20000, Loss: 0.0000508275770699\n",
      "Epoch: 4340/20000, Loss: 0.0000505432290083\n",
      "Epoch: 4350/20000, Loss: 0.0000502588700328\n",
      "Epoch: 4360/20000, Loss: 0.0000499744855915\n",
      "Epoch: 4370/20000, Loss: 0.0000496900975122\n",
      "Epoch: 4380/20000, Loss: 0.0000494057203468\n",
      "Epoch: 4390/20000, Loss: 0.0000491213650093\n",
      "Epoch: 4400/20000, Loss: 0.0000488370569656\n",
      "Epoch: 4410/20000, Loss: 0.0000485527925775\n",
      "Epoch: 4420/20000, Loss: 0.0000482686227770\n",
      "Epoch: 4430/20000, Loss: 0.0000479845512018\n",
      "Epoch: 4440/20000, Loss: 0.0000477011126350\n",
      "Epoch: 4450/20000, Loss: 0.0000475169072160\n",
      "Epoch: 4460/20000, Loss: 0.0000780355985626\n",
      "Epoch: 4470/20000, Loss: 0.0000696455608704\n",
      "Epoch: 4480/20000, Loss: 0.0000524596725882\n",
      "Epoch: 4490/20000, Loss: 0.0000467271784146\n",
      "Epoch: 4500/20000, Loss: 0.0000461352756247\n",
      "Epoch: 4510/20000, Loss: 0.0000459391267214\n",
      "Epoch: 4520/20000, Loss: 0.0000455977133242\n",
      "Epoch: 4530/20000, Loss: 0.0000452631320513\n",
      "Epoch: 4540/20000, Loss: 0.0000449593353551\n",
      "Epoch: 4550/20000, Loss: 0.0000446732228738\n",
      "Epoch: 4560/20000, Loss: 0.0000443947974418\n",
      "Epoch: 4570/20000, Loss: 0.0000441179072368\n",
      "Epoch: 4580/20000, Loss: 0.0000438404313172\n",
      "Epoch: 4590/20000, Loss: 0.0000435635847680\n",
      "Epoch: 4600/20000, Loss: 0.0000432875349361\n",
      "Epoch: 4610/20000, Loss: 0.0000430118270742\n",
      "Epoch: 4620/20000, Loss: 0.0000427366794611\n",
      "Epoch: 4630/20000, Loss: 0.0000424619611294\n",
      "Epoch: 4640/20000, Loss: 0.0000421877848567\n",
      "Epoch: 4650/20000, Loss: 0.0000419141288148\n",
      "Epoch: 4660/20000, Loss: 0.0000416409893660\n",
      "Epoch: 4670/20000, Loss: 0.0000413684210798\n",
      "Epoch: 4680/20000, Loss: 0.0000410964094044\n",
      "Epoch: 4690/20000, Loss: 0.0000408250198234\n",
      "Epoch: 4700/20000, Loss: 0.0000405542377848\n",
      "Epoch: 4710/20000, Loss: 0.0000402840851166\n",
      "Epoch: 4720/20000, Loss: 0.0000400145800086\n",
      "Epoch: 4730/20000, Loss: 0.0000397457661165\n",
      "Epoch: 4740/20000, Loss: 0.0000394780836359\n",
      "Epoch: 4750/20000, Loss: 0.0000393803384213\n",
      "Epoch: 4760/20000, Loss: 0.0001087631244445\n",
      "Epoch: 4770/20000, Loss: 0.0000424012469011\n",
      "Epoch: 4780/20000, Loss: 0.0000483322510263\n",
      "Epoch: 4790/20000, Loss: 0.0000397002477257\n",
      "Epoch: 4800/20000, Loss: 0.0000384040467907\n",
      "Epoch: 4810/20000, Loss: 0.0000382128564524\n",
      "Epoch: 4820/20000, Loss: 0.0000374994087906\n",
      "Epoch: 4830/20000, Loss: 0.0000371941168851\n",
      "Epoch: 4840/20000, Loss: 0.0000369451590814\n",
      "Epoch: 4850/20000, Loss: 0.0000366841668438\n",
      "Epoch: 4860/20000, Loss: 0.0000364247134712\n",
      "Epoch: 4870/20000, Loss: 0.0000361688798876\n",
      "Epoch: 4880/20000, Loss: 0.0000359152218152\n",
      "Epoch: 4890/20000, Loss: 0.0000356630116585\n",
      "Epoch: 4900/20000, Loss: 0.0000354119620170\n",
      "Epoch: 4910/20000, Loss: 0.0000351619892172\n",
      "Epoch: 4920/20000, Loss: 0.0000349130386894\n",
      "Epoch: 4930/20000, Loss: 0.0000346650740539\n",
      "Epoch: 4940/20000, Loss: 0.0000344181353285\n",
      "Epoch: 4950/20000, Loss: 0.0000341722188750\n",
      "Epoch: 4960/20000, Loss: 0.0000339273319696\n",
      "Epoch: 4970/20000, Loss: 0.0000336834891641\n",
      "Epoch: 4980/20000, Loss: 0.0000334407050104\n",
      "Epoch: 4990/20000, Loss: 0.0000331989904225\n",
      "Epoch: 5000/20000, Loss: 0.0000329583563143\n",
      "Epoch: 5010/20000, Loss: 0.0000327188099618\n",
      "Epoch: 5020/20000, Loss: 0.0000324803804688\n",
      "Epoch: 5030/20000, Loss: 0.0000322430678352\n",
      "Epoch: 5040/20000, Loss: 0.0000320068647852\n",
      "Epoch: 5050/20000, Loss: 0.0000317718149745\n",
      "Epoch: 5060/20000, Loss: 0.0000315379038511\n",
      "Epoch: 5070/20000, Loss: 0.0000313052187266\n",
      "Epoch: 5080/20000, Loss: 0.0000310784525936\n",
      "Epoch: 5090/20000, Loss: 0.0000320580256812\n",
      "Epoch: 5100/20000, Loss: 0.0000904336702661\n",
      "Epoch: 5110/20000, Loss: 0.0000515599458595\n",
      "Epoch: 5120/20000, Loss: 0.0000357642966264\n",
      "Epoch: 5130/20000, Loss: 0.0000305215580738\n",
      "Epoch: 5140/20000, Loss: 0.0000297895639960\n",
      "Epoch: 5150/20000, Loss: 0.0000296078906104\n",
      "Epoch: 5160/20000, Loss: 0.0000293701232295\n",
      "Epoch: 5170/20000, Loss: 0.0000291279175144\n",
      "Epoch: 5180/20000, Loss: 0.0000289003564831\n",
      "Epoch: 5190/20000, Loss: 0.0000286825361400\n",
      "Epoch: 5200/20000, Loss: 0.0000284687976091\n",
      "Epoch: 5210/20000, Loss: 0.0000282558103208\n",
      "Epoch: 5220/20000, Loss: 0.0000280435633613\n",
      "Epoch: 5230/20000, Loss: 0.0000278331353911\n",
      "Epoch: 5240/20000, Loss: 0.0000276240916719\n",
      "Epoch: 5250/20000, Loss: 0.0000274163212453\n",
      "Epoch: 5260/20000, Loss: 0.0000272098568530\n",
      "Epoch: 5270/20000, Loss: 0.0000270047039521\n",
      "Epoch: 5280/20000, Loss: 0.0000268008316198\n",
      "Epoch: 5290/20000, Loss: 0.0000265982453129\n",
      "Epoch: 5300/20000, Loss: 0.0000263969650405\n",
      "Epoch: 5310/20000, Loss: 0.0000261969908024\n",
      "Epoch: 5320/20000, Loss: 0.0000259983080468\n",
      "Epoch: 5330/20000, Loss: 0.0000258009276877\n",
      "Epoch: 5340/20000, Loss: 0.0000256048606389\n",
      "Epoch: 5350/20000, Loss: 0.0000254101050814\n",
      "Epoch: 5360/20000, Loss: 0.0000252166810242\n",
      "Epoch: 5370/20000, Loss: 0.0000250255543506\n",
      "Epoch: 5380/20000, Loss: 0.0000249710101343\n",
      "Epoch: 5390/20000, Loss: 0.0000561032065889\n",
      "Epoch: 5400/20000, Loss: 0.0000513566264999\n",
      "Epoch: 5410/20000, Loss: 0.0000335295590048\n",
      "Epoch: 5420/20000, Loss: 0.0000267554769380\n",
      "Epoch: 5430/20000, Loss: 0.0000246122908720\n",
      "Epoch: 5440/20000, Loss: 0.0000239722812694\n",
      "Epoch: 5450/20000, Loss: 0.0000236798059632\n",
      "Epoch: 5460/20000, Loss: 0.0000234605467995\n",
      "Epoch: 5470/20000, Loss: 0.0000232570491789\n",
      "Epoch: 5480/20000, Loss: 0.0000230641635426\n",
      "Epoch: 5490/20000, Loss: 0.0000228851822612\n",
      "Epoch: 5500/20000, Loss: 0.0000227128530241\n",
      "Epoch: 5510/20000, Loss: 0.0000225403200602\n",
      "Epoch: 5520/20000, Loss: 0.0000223698152695\n",
      "Epoch: 5530/20000, Loss: 0.0000222006019612\n",
      "Epoch: 5540/20000, Loss: 0.0000220327965508\n",
      "Epoch: 5550/20000, Loss: 0.0000218662644329\n",
      "Epoch: 5560/20000, Loss: 0.0000217010219785\n",
      "Epoch: 5570/20000, Loss: 0.0000215370910155\n",
      "Epoch: 5580/20000, Loss: 0.0000213744388020\n",
      "Epoch: 5590/20000, Loss: 0.0000212130635191\n",
      "Epoch: 5600/20000, Loss: 0.0000210529633478\n",
      "Epoch: 5610/20000, Loss: 0.0000208941182791\n",
      "Epoch: 5620/20000, Loss: 0.0000207365683309\n",
      "Epoch: 5630/20000, Loss: 0.0000205802589335\n",
      "Epoch: 5640/20000, Loss: 0.0000204252737603\n",
      "Epoch: 5650/20000, Loss: 0.0000202743212867\n",
      "Epoch: 5660/20000, Loss: 0.0000205998348974\n",
      "Epoch: 5670/20000, Loss: 0.0000882478343556\n",
      "Epoch: 5680/20000, Loss: 0.0000206448876270\n",
      "Epoch: 5690/20000, Loss: 0.0000205824944715\n",
      "Epoch: 5700/20000, Loss: 0.0000207136454264\n",
      "Epoch: 5710/20000, Loss: 0.0000201031052711\n",
      "Epoch: 5720/20000, Loss: 0.0000195684224309\n",
      "Epoch: 5730/20000, Loss: 0.0000192346706172\n",
      "Epoch: 5740/20000, Loss: 0.0000190205555555\n",
      "Epoch: 5750/20000, Loss: 0.0000188590765902\n",
      "Epoch: 5760/20000, Loss: 0.0000187188525160\n",
      "Epoch: 5770/20000, Loss: 0.0000185823300853\n",
      "Epoch: 5780/20000, Loss: 0.0000184444797924\n",
      "Epoch: 5790/20000, Loss: 0.0000183089068742\n",
      "Epoch: 5800/20000, Loss: 0.0000181750565389\n",
      "Epoch: 5810/20000, Loss: 0.0000180422848644\n",
      "Epoch: 5820/20000, Loss: 0.0000179107773874\n",
      "Epoch: 5830/20000, Loss: 0.0000177804849955\n",
      "Epoch: 5840/20000, Loss: 0.0000176513221959\n",
      "Epoch: 5850/20000, Loss: 0.0000175233435584\n",
      "Epoch: 5860/20000, Loss: 0.0000173964926944\n",
      "Epoch: 5870/20000, Loss: 0.0000172708096216\n",
      "Epoch: 5880/20000, Loss: 0.0000171462579601\n",
      "Epoch: 5890/20000, Loss: 0.0000170228340721\n",
      "Epoch: 5900/20000, Loss: 0.0000169005325006\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 5910/20000, Loss: 0.0000167793768924\n",
      "Epoch: 5920/20000, Loss: 0.0000166593163158\n",
      "Epoch: 5930/20000, Loss: 0.0000165408491739\n",
      "Epoch: 5940/20000, Loss: 0.0000164841057995\n",
      "Epoch: 5950/20000, Loss: 0.0000312253250740\n",
      "Epoch: 5960/20000, Loss: 0.0000419243006036\n",
      "Epoch: 5970/20000, Loss: 0.0000235428688029\n",
      "Epoch: 5980/20000, Loss: 0.0000197194713110\n",
      "Epoch: 5990/20000, Loss: 0.0000173694606929\n",
      "Epoch: 6000/20000, Loss: 0.0000162872256624\n",
      "Epoch: 6010/20000, Loss: 0.0000158624134201\n",
      "Epoch: 6020/20000, Loss: 0.0000156349233293\n",
      "Epoch: 6030/20000, Loss: 0.0000154803346959\n",
      "Epoch: 6040/20000, Loss: 0.0000153567525558\n",
      "Epoch: 6050/20000, Loss: 0.0000152482880367\n",
      "Epoch: 6060/20000, Loss: 0.0000151449639816\n",
      "Epoch: 6070/20000, Loss: 0.0000150412442963\n",
      "Epoch: 6080/20000, Loss: 0.0000149391953528\n",
      "Epoch: 6090/20000, Loss: 0.0000148383023770\n",
      "Epoch: 6100/20000, Loss: 0.0000147384653246\n",
      "Epoch: 6110/20000, Loss: 0.0000146396278069\n",
      "Epoch: 6120/20000, Loss: 0.0000145418152897\n",
      "Epoch: 6130/20000, Loss: 0.0000144449859363\n",
      "Epoch: 6140/20000, Loss: 0.0000143491361086\n",
      "Epoch: 6150/20000, Loss: 0.0000142542485264\n",
      "Epoch: 6160/20000, Loss: 0.0000141603268276\n",
      "Epoch: 6170/20000, Loss: 0.0000140673491842\n",
      "Epoch: 6180/20000, Loss: 0.0000139753246913\n",
      "Epoch: 6190/20000, Loss: 0.0000138842442539\n",
      "Epoch: 6200/20000, Loss: 0.0000137940805871\n",
      "Epoch: 6210/20000, Loss: 0.0000137048773468\n",
      "Epoch: 6220/20000, Loss: 0.0000136189628392\n",
      "Epoch: 6230/20000, Loss: 0.0000139743415275\n",
      "Epoch: 6240/20000, Loss: 0.0000837788684294\n",
      "Epoch: 6250/20000, Loss: 0.0000145639896800\n",
      "Epoch: 6260/20000, Loss: 0.0000150011546793\n",
      "Epoch: 6270/20000, Loss: 0.0000149943361976\n",
      "Epoch: 6280/20000, Loss: 0.0000141134114529\n",
      "Epoch: 6290/20000, Loss: 0.0000134245874506\n",
      "Epoch: 6300/20000, Loss: 0.0000131220313051\n",
      "Epoch: 6310/20000, Loss: 0.0000129535619635\n",
      "Epoch: 6320/20000, Loss: 0.0000128410783873\n",
      "Epoch: 6330/20000, Loss: 0.0000127518796944\n",
      "Epoch: 6340/20000, Loss: 0.0000126724780785\n",
      "Epoch: 6350/20000, Loss: 0.0000125965862026\n",
      "Epoch: 6360/20000, Loss: 0.0000125207625388\n",
      "Epoch: 6370/20000, Loss: 0.0000124460530060\n",
      "Epoch: 6380/20000, Loss: 0.0000123723848446\n",
      "Epoch: 6390/20000, Loss: 0.0000122995015772\n",
      "Epoch: 6400/20000, Loss: 0.0000122274504974\n",
      "Epoch: 6410/20000, Loss: 0.0000121561952255\n",
      "Epoch: 6420/20000, Loss: 0.0000120857303045\n",
      "Epoch: 6430/20000, Loss: 0.0000120160402730\n",
      "Epoch: 6440/20000, Loss: 0.0000119471123980\n",
      "Epoch: 6450/20000, Loss: 0.0000118789475891\n",
      "Epoch: 6460/20000, Loss: 0.0000118115294754\n",
      "Epoch: 6470/20000, Loss: 0.0000117448416859\n",
      "Epoch: 6480/20000, Loss: 0.0000116789015010\n",
      "Epoch: 6490/20000, Loss: 0.0000116136898214\n",
      "Epoch: 6500/20000, Loss: 0.0000115492230179\n",
      "Epoch: 6510/20000, Loss: 0.0000114875228974\n",
      "Epoch: 6520/20000, Loss: 0.0000116989385788\n",
      "Epoch: 6530/20000, Loss: 0.0000601845640631\n",
      "Epoch: 6540/20000, Loss: 0.0000234216640820\n",
      "Epoch: 6550/20000, Loss: 0.0000157666636369\n",
      "Epoch: 6560/20000, Loss: 0.0000122817355077\n",
      "Epoch: 6570/20000, Loss: 0.0000115195853141\n",
      "Epoch: 6580/20000, Loss: 0.0000112215848276\n",
      "Epoch: 6590/20000, Loss: 0.0000111181734610\n",
      "Epoch: 6600/20000, Loss: 0.0000110276587293\n",
      "Epoch: 6610/20000, Loss: 0.0000109386201075\n",
      "Epoch: 6620/20000, Loss: 0.0000108673257273\n",
      "Epoch: 6630/20000, Loss: 0.0000108117365016\n",
      "Epoch: 6640/20000, Loss: 0.0000107567411760\n",
      "Epoch: 6650/20000, Loss: 0.0000107019686766\n",
      "Epoch: 6660/20000, Loss: 0.0000106485931610\n",
      "Epoch: 6670/20000, Loss: 0.0000105957496999\n",
      "Epoch: 6680/20000, Loss: 0.0000105435528894\n",
      "Epoch: 6690/20000, Loss: 0.0000104919836303\n",
      "Epoch: 6700/20000, Loss: 0.0000104409964479\n",
      "Epoch: 6710/20000, Loss: 0.0000103905931610\n",
      "Epoch: 6720/20000, Loss: 0.0000103407519418\n",
      "Epoch: 6730/20000, Loss: 0.0000102914636955\n",
      "Epoch: 6740/20000, Loss: 0.0000102427402453\n",
      "Epoch: 6750/20000, Loss: 0.0000101945533970\n",
      "Epoch: 6760/20000, Loss: 0.0000101468931462\n",
      "Epoch: 6770/20000, Loss: 0.0000100997649497\n",
      "Epoch: 6780/20000, Loss: 0.0000100533943623\n",
      "Epoch: 6790/20000, Loss: 0.0000100315264717\n",
      "Epoch: 6800/20000, Loss: 0.0000146555112224\n",
      "Epoch: 6810/20000, Loss: 0.0000134398687806\n",
      "Epoch: 6820/20000, Loss: 0.0000154322533490\n",
      "Epoch: 6830/20000, Loss: 0.0000108131380330\n",
      "Epoch: 6840/20000, Loss: 0.0000101723899206\n",
      "Epoch: 6850/20000, Loss: 0.0000098429409263\n",
      "Epoch: 6860/20000, Loss: 0.0000097752172223\n",
      "Epoch: 6870/20000, Loss: 0.0000097335750979\n",
      "Epoch: 6880/20000, Loss: 0.0000096748699434\n",
      "Epoch: 6890/20000, Loss: 0.0000096169105746\n",
      "Epoch: 6900/20000, Loss: 0.0000095680607046\n",
      "Epoch: 6910/20000, Loss: 0.0000095281757240\n",
      "Epoch: 6920/20000, Loss: 0.0000094880060715\n",
      "Epoch: 6930/20000, Loss: 0.0000094485139925\n",
      "Epoch: 6940/20000, Loss: 0.0000094096858447\n",
      "Epoch: 6950/20000, Loss: 0.0000093713488241\n",
      "Epoch: 6960/20000, Loss: 0.0000093334101621\n",
      "Epoch: 6970/20000, Loss: 0.0000092959007816\n",
      "Epoch: 6980/20000, Loss: 0.0000092587997642\n",
      "Epoch: 6990/20000, Loss: 0.0000092220698207\n",
      "Epoch: 7000/20000, Loss: 0.0000091857355073\n",
      "Epoch: 7010/20000, Loss: 0.0000091497468020\n",
      "Epoch: 7020/20000, Loss: 0.0000091141382654\n",
      "Epoch: 7030/20000, Loss: 0.0000090788726084\n",
      "Epoch: 7040/20000, Loss: 0.0000090439662017\n",
      "Epoch: 7050/20000, Loss: 0.0000090093844847\n",
      "Epoch: 7060/20000, Loss: 0.0000089752311396\n",
      "Epoch: 7070/20000, Loss: 0.0000089518680397\n",
      "Epoch: 7080/20000, Loss: 0.0000115055590868\n",
      "Epoch: 7090/20000, Loss: 0.0000300182218780\n",
      "Epoch: 7100/20000, Loss: 0.0000197373319679\n",
      "Epoch: 7110/20000, Loss: 0.0000097044630820\n",
      "Epoch: 7120/20000, Loss: 0.0000091971887741\n",
      "Epoch: 7130/20000, Loss: 0.0000089810200734\n",
      "Epoch: 7140/20000, Loss: 0.0000089226996351\n",
      "Epoch: 7150/20000, Loss: 0.0000087763546617\n",
      "Epoch: 7160/20000, Loss: 0.0000087074649855\n",
      "Epoch: 7170/20000, Loss: 0.0000086624495452\n",
      "Epoch: 7180/20000, Loss: 0.0000086272038970\n",
      "Epoch: 7190/20000, Loss: 0.0000085971496446\n",
      "Epoch: 7200/20000, Loss: 0.0000085673073045\n",
      "Epoch: 7210/20000, Loss: 0.0000085373249021\n",
      "Epoch: 7220/20000, Loss: 0.0000085080991994\n",
      "Epoch: 7230/20000, Loss: 0.0000084791572590\n",
      "Epoch: 7240/20000, Loss: 0.0000084505036284\n",
      "Epoch: 7250/20000, Loss: 0.0000084221164798\n",
      "Epoch: 7260/20000, Loss: 0.0000083939621618\n",
      "Epoch: 7270/20000, Loss: 0.0000083660497694\n",
      "Epoch: 7280/20000, Loss: 0.0000083383583842\n",
      "Epoch: 7290/20000, Loss: 0.0000083108807303\n",
      "Epoch: 7300/20000, Loss: 0.0000082836077127\n",
      "Epoch: 7310/20000, Loss: 0.0000082565311459\n",
      "Epoch: 7320/20000, Loss: 0.0000082296564869\n",
      "Epoch: 7330/20000, Loss: 0.0000082029655459\n",
      "Epoch: 7340/20000, Loss: 0.0000081764592323\n",
      "Epoch: 7350/20000, Loss: 0.0000081501339082\n",
      "Epoch: 7360/20000, Loss: 0.0000081242424130\n",
      "Epoch: 7370/20000, Loss: 0.0000081238977145\n",
      "Epoch: 7380/20000, Loss: 0.0000130224152599\n",
      "Epoch: 7390/20000, Loss: 0.0000110407600005\n",
      "Epoch: 7400/20000, Loss: 0.0000128897663672\n",
      "Epoch: 7410/20000, Loss: 0.0000088034839791\n",
      "Epoch: 7420/20000, Loss: 0.0000082172800830\n",
      "Epoch: 7430/20000, Loss: 0.0000080938989413\n",
      "Epoch: 7440/20000, Loss: 0.0000079905421444\n",
      "Epoch: 7450/20000, Loss: 0.0000079587898654\n",
      "Epoch: 7460/20000, Loss: 0.0000079286464825\n",
      "Epoch: 7470/20000, Loss: 0.0000078896855484\n",
      "Epoch: 7480/20000, Loss: 0.0000078569937614\n",
      "Epoch: 7490/20000, Loss: 0.0000078330704127\n",
      "Epoch: 7500/20000, Loss: 0.0000078087459769\n",
      "Epoch: 7510/20000, Loss: 0.0000077848735600\n",
      "Epoch: 7520/20000, Loss: 0.0000077613722169\n",
      "Epoch: 7530/20000, Loss: 0.0000077380527728\n",
      "Epoch: 7540/20000, Loss: 0.0000077148533819\n",
      "Epoch: 7550/20000, Loss: 0.0000076917731349\n",
      "Epoch: 7560/20000, Loss: 0.0000076688129411\n",
      "Epoch: 7570/20000, Loss: 0.0000076459482443\n",
      "Epoch: 7580/20000, Loss: 0.0000076231735875\n",
      "Epoch: 7590/20000, Loss: 0.0000076004762377\n",
      "Epoch: 7600/20000, Loss: 0.0000075778666542\n",
      "Epoch: 7610/20000, Loss: 0.0000075553339229\n",
      "Epoch: 7620/20000, Loss: 0.0000075328698586\n",
      "Epoch: 7630/20000, Loss: 0.0000075104785537\n",
      "Epoch: 7640/20000, Loss: 0.0000074885888353\n",
      "Epoch: 7650/20000, Loss: 0.0000075199200182\n",
      "Epoch: 7660/20000, Loss: 0.0000194232306967\n",
      "Epoch: 7670/20000, Loss: 0.0000258603286056\n",
      "Epoch: 7680/20000, Loss: 0.0000117021672850\n",
      "Epoch: 7690/20000, Loss: 0.0000100917004602\n",
      "Epoch: 7700/20000, Loss: 0.0000087970165623\n",
      "Epoch: 7710/20000, Loss: 0.0000078401380961\n",
      "Epoch: 7720/20000, Loss: 0.0000075114362517\n",
      "Epoch: 7730/20000, Loss: 0.0000073854453149\n",
      "Epoch: 7740/20000, Loss: 0.0000073194032666\n",
      "Epoch: 7750/20000, Loss: 0.0000072846137300\n",
      "Epoch: 7760/20000, Loss: 0.0000072628131420\n",
      "Epoch: 7770/20000, Loss: 0.0000072413822636\n",
      "Epoch: 7780/20000, Loss: 0.0000072191778600\n",
      "Epoch: 7790/20000, Loss: 0.0000071981576184\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 7800/20000, Loss: 0.0000071770687100\n",
      "Epoch: 7810/20000, Loss: 0.0000071561639743\n",
      "Epoch: 7820/20000, Loss: 0.0000071352778832\n",
      "Epoch: 7830/20000, Loss: 0.0000071144431786\n",
      "Epoch: 7840/20000, Loss: 0.0000070936343946\n",
      "Epoch: 7850/20000, Loss: 0.0000070728583523\n",
      "Epoch: 7860/20000, Loss: 0.0000070520918598\n",
      "Epoch: 7870/20000, Loss: 0.0000070313276410\n",
      "Epoch: 7880/20000, Loss: 0.0000070105725172\n",
      "Epoch: 7890/20000, Loss: 0.0000069898292168\n",
      "Epoch: 7900/20000, Loss: 0.0000069690736382\n",
      "Epoch: 7910/20000, Loss: 0.0000069483139669\n",
      "Epoch: 7920/20000, Loss: 0.0000069276302384\n",
      "Epoch: 7930/20000, Loss: 0.0000069123875619\n",
      "Epoch: 7940/20000, Loss: 0.0000077108443293\n",
      "Epoch: 7950/20000, Loss: 0.0000787494573160\n",
      "Epoch: 7960/20000, Loss: 0.0000125194392240\n",
      "Epoch: 7970/20000, Loss: 0.0000093887265393\n",
      "Epoch: 7980/20000, Loss: 0.0000078912798926\n",
      "Epoch: 7990/20000, Loss: 0.0000070950873123\n",
      "Epoch: 8000/20000, Loss: 0.0000068504523369\n",
      "Epoch: 8010/20000, Loss: 0.0000067835180744\n",
      "Epoch: 8020/20000, Loss: 0.0000067599280555\n",
      "Epoch: 8030/20000, Loss: 0.0000067419186962\n",
      "Epoch: 8040/20000, Loss: 0.0000067174155447\n",
      "Epoch: 8050/20000, Loss: 0.0000066936863732\n",
      "Epoch: 8060/20000, Loss: 0.0000066736793087\n",
      "Epoch: 8070/20000, Loss: 0.0000066529751166\n",
      "Epoch: 8080/20000, Loss: 0.0000066326201704\n",
      "Epoch: 8090/20000, Loss: 0.0000066122834141\n",
      "Epoch: 8100/20000, Loss: 0.0000065920007728\n",
      "Epoch: 8110/20000, Loss: 0.0000065717117650\n",
      "Epoch: 8120/20000, Loss: 0.0000065514004746\n",
      "Epoch: 8130/20000, Loss: 0.0000065310728132\n",
      "Epoch: 8140/20000, Loss: 0.0000065107146838\n",
      "Epoch: 8150/20000, Loss: 0.0000064903288148\n",
      "Epoch: 8160/20000, Loss: 0.0000064699029281\n",
      "Epoch: 8170/20000, Loss: 0.0000064494433900\n",
      "Epoch: 8180/20000, Loss: 0.0000064289388320\n",
      "Epoch: 8190/20000, Loss: 0.0000064083928919\n",
      "Epoch: 8200/20000, Loss: 0.0000063878178480\n",
      "Epoch: 8210/20000, Loss: 0.0000063691772993\n",
      "Epoch: 8220/20000, Loss: 0.0000067875503191\n",
      "Epoch: 8230/20000, Loss: 0.0000737171067158\n",
      "Epoch: 8240/20000, Loss: 0.0000128013834910\n",
      "Epoch: 8250/20000, Loss: 0.0000094243550848\n",
      "Epoch: 8260/20000, Loss: 0.0000067258420131\n",
      "Epoch: 8270/20000, Loss: 0.0000066825873546\n",
      "Epoch: 8280/20000, Loss: 0.0000065281410571\n",
      "Epoch: 8290/20000, Loss: 0.0000063034867708\n",
      "Epoch: 8300/20000, Loss: 0.0000062312183218\n",
      "Epoch: 8310/20000, Loss: 0.0000062169951889\n",
      "Epoch: 8320/20000, Loss: 0.0000061913965510\n",
      "Epoch: 8330/20000, Loss: 0.0000061708028625\n",
      "Epoch: 8340/20000, Loss: 0.0000061500618358\n",
      "Epoch: 8350/20000, Loss: 0.0000061307650867\n",
      "Epoch: 8360/20000, Loss: 0.0000061112154981\n",
      "Epoch: 8370/20000, Loss: 0.0000060918996496\n",
      "Epoch: 8380/20000, Loss: 0.0000060725183175\n",
      "Epoch: 8390/20000, Loss: 0.0000060531301642\n",
      "Epoch: 8400/20000, Loss: 0.0000060337315517\n",
      "Epoch: 8410/20000, Loss: 0.0000060142765506\n",
      "Epoch: 8420/20000, Loss: 0.0000059947865338\n",
      "Epoch: 8430/20000, Loss: 0.0000059752560446\n",
      "Epoch: 8440/20000, Loss: 0.0000059556737142\n",
      "Epoch: 8450/20000, Loss: 0.0000059360449995\n",
      "Epoch: 8460/20000, Loss: 0.0000059163535298\n",
      "Epoch: 8470/20000, Loss: 0.0000058966184042\n",
      "Epoch: 8480/20000, Loss: 0.0000058768273448\n",
      "Epoch: 8490/20000, Loss: 0.0000058574496506\n",
      "Epoch: 8500/20000, Loss: 0.0000059009207689\n",
      "Epoch: 8510/20000, Loss: 0.0000216614189412\n",
      "Epoch: 8520/20000, Loss: 0.0000336262346536\n",
      "Epoch: 8530/20000, Loss: 0.0000154867593665\n",
      "Epoch: 8540/20000, Loss: 0.0000096182411653\n",
      "Epoch: 8550/20000, Loss: 0.0000069618663474\n",
      "Epoch: 8560/20000, Loss: 0.0000061021878537\n",
      "Epoch: 8570/20000, Loss: 0.0000058378668655\n",
      "Epoch: 8580/20000, Loss: 0.0000057625034060\n",
      "Epoch: 8590/20000, Loss: 0.0000057164793361\n",
      "Epoch: 8600/20000, Loss: 0.0000056831604525\n",
      "Epoch: 8610/20000, Loss: 0.0000056567496358\n",
      "Epoch: 8620/20000, Loss: 0.0000056354883782\n",
      "Epoch: 8630/20000, Loss: 0.0000056158228290\n",
      "Epoch: 8640/20000, Loss: 0.0000055956188589\n",
      "Epoch: 8650/20000, Loss: 0.0000055757282098\n",
      "Epoch: 8660/20000, Loss: 0.0000055558098211\n",
      "Epoch: 8670/20000, Loss: 0.0000055359123508\n",
      "Epoch: 8680/20000, Loss: 0.0000055159862313\n",
      "Epoch: 8690/20000, Loss: 0.0000054960269154\n",
      "Epoch: 8700/20000, Loss: 0.0000054760471357\n",
      "Epoch: 8710/20000, Loss: 0.0000054560205172\n",
      "Epoch: 8720/20000, Loss: 0.0000054359566093\n",
      "Epoch: 8730/20000, Loss: 0.0000054158549574\n",
      "Epoch: 8740/20000, Loss: 0.0000053957101045\n",
      "Epoch: 8750/20000, Loss: 0.0000053755120462\n",
      "Epoch: 8760/20000, Loss: 0.0000053552826103\n",
      "Epoch: 8770/20000, Loss: 0.0000053350117923\n",
      "Epoch: 8780/20000, Loss: 0.0000053148514780\n",
      "Epoch: 8790/20000, Loss: 0.0000053146754908\n",
      "Epoch: 8800/20000, Loss: 0.0000102657040770\n",
      "Epoch: 8810/20000, Loss: 0.0000066224520197\n",
      "Epoch: 8820/20000, Loss: 0.0000071515109994\n",
      "Epoch: 8830/20000, Loss: 0.0000062253743636\n",
      "Epoch: 8840/20000, Loss: 0.0000062079957388\n",
      "Epoch: 8850/20000, Loss: 0.0000058099162743\n",
      "Epoch: 8860/20000, Loss: 0.0000053996718634\n",
      "Epoch: 8870/20000, Loss: 0.0000052371246966\n",
      "Epoch: 8880/20000, Loss: 0.0000051757924666\n",
      "Epoch: 8890/20000, Loss: 0.0000051404281294\n",
      "Epoch: 8900/20000, Loss: 0.0000051149254432\n",
      "Epoch: 8910/20000, Loss: 0.0000050941666814\n",
      "Epoch: 8920/20000, Loss: 0.0000050743565225\n",
      "Epoch: 8930/20000, Loss: 0.0000050542025747\n",
      "Epoch: 8940/20000, Loss: 0.0000050343655857\n",
      "Epoch: 8950/20000, Loss: 0.0000050145731620\n",
      "Epoch: 8960/20000, Loss: 0.0000049947789194\n",
      "Epoch: 8970/20000, Loss: 0.0000049750024118\n",
      "Epoch: 8980/20000, Loss: 0.0000049552286328\n",
      "Epoch: 8990/20000, Loss: 0.0000049354480325\n",
      "Epoch: 9000/20000, Loss: 0.0000049156597015\n",
      "Epoch: 9010/20000, Loss: 0.0000048958627303\n",
      "Epoch: 9020/20000, Loss: 0.0000048760502978\n",
      "Epoch: 9030/20000, Loss: 0.0000048562233133\n",
      "Epoch: 9040/20000, Loss: 0.0000048363958740\n",
      "Epoch: 9050/20000, Loss: 0.0000048165479711\n",
      "Epoch: 9060/20000, Loss: 0.0000047966841521\n",
      "Epoch: 9070/20000, Loss: 0.0000047768185141\n",
      "Epoch: 9080/20000, Loss: 0.0000047570929382\n",
      "Epoch: 9090/20000, Loss: 0.0000047626185733\n",
      "Epoch: 9100/20000, Loss: 0.0000129417367134\n",
      "Epoch: 9110/20000, Loss: 0.0000223573206313\n",
      "Epoch: 9120/20000, Loss: 0.0000113210689960\n",
      "Epoch: 9130/20000, Loss: 0.0000077471322584\n",
      "Epoch: 9140/20000, Loss: 0.0000055520913520\n",
      "Epoch: 9150/20000, Loss: 0.0000051336951401\n",
      "Epoch: 9160/20000, Loss: 0.0000046735181058\n",
      "Epoch: 9170/20000, Loss: 0.0000046827112783\n",
      "Epoch: 9180/20000, Loss: 0.0000046117083912\n",
      "Epoch: 9190/20000, Loss: 0.0000045971682994\n",
      "Epoch: 9200/20000, Loss: 0.0000045726715143\n",
      "Epoch: 9210/20000, Loss: 0.0000045528108785\n",
      "Epoch: 9220/20000, Loss: 0.0000045340593715\n",
      "Epoch: 9230/20000, Loss: 0.0000045154092732\n",
      "Epoch: 9240/20000, Loss: 0.0000044969592636\n",
      "Epoch: 9250/20000, Loss: 0.0000044785983846\n",
      "Epoch: 9260/20000, Loss: 0.0000044602916205\n",
      "Epoch: 9270/20000, Loss: 0.0000044420066843\n",
      "Epoch: 9280/20000, Loss: 0.0000044237513066\n",
      "Epoch: 9290/20000, Loss: 0.0000044055177568\n",
      "Epoch: 9300/20000, Loss: 0.0000043873028517\n",
      "Epoch: 9310/20000, Loss: 0.0000043691047722\n",
      "Epoch: 9320/20000, Loss: 0.0000043509194256\n",
      "Epoch: 9330/20000, Loss: 0.0000043327431740\n",
      "Epoch: 9340/20000, Loss: 0.0000043145905693\n",
      "Epoch: 9350/20000, Loss: 0.0000042964479690\n",
      "Epoch: 9360/20000, Loss: 0.0000042783221943\n",
      "Epoch: 9370/20000, Loss: 0.0000042602196118\n",
      "Epoch: 9380/20000, Loss: 0.0000042422939259\n",
      "Epoch: 9390/20000, Loss: 0.0000042446990847\n",
      "Epoch: 9400/20000, Loss: 0.0000090346484285\n",
      "Epoch: 9410/20000, Loss: 0.0000044820826588\n",
      "Epoch: 9420/20000, Loss: 0.0000044717230594\n",
      "Epoch: 9430/20000, Loss: 0.0000049820282584\n",
      "Epoch: 9440/20000, Loss: 0.0000051992637964\n",
      "Epoch: 9450/20000, Loss: 0.0000046898726396\n",
      "Epoch: 9460/20000, Loss: 0.0000043376262511\n",
      "Epoch: 9470/20000, Loss: 0.0000041890334614\n",
      "Epoch: 9480/20000, Loss: 0.0000041249172682\n",
      "Epoch: 9490/20000, Loss: 0.0000040900513341\n",
      "Epoch: 9500/20000, Loss: 0.0000040671161514\n",
      "Epoch: 9510/20000, Loss: 0.0000040491208892\n",
      "Epoch: 9520/20000, Loss: 0.0000040318091123\n",
      "Epoch: 9530/20000, Loss: 0.0000040140421333\n",
      "Epoch: 9540/20000, Loss: 0.0000039966612349\n",
      "Epoch: 9550/20000, Loss: 0.0000039794181248\n",
      "Epoch: 9560/20000, Loss: 0.0000039622432269\n",
      "Epoch: 9570/20000, Loss: 0.0000039451379052\n",
      "Epoch: 9580/20000, Loss: 0.0000039280876081\n",
      "Epoch: 9590/20000, Loss: 0.0000039110914258\n",
      "Epoch: 9600/20000, Loss: 0.0000038941338971\n",
      "Epoch: 9610/20000, Loss: 0.0000038772268454\n",
      "Epoch: 9620/20000, Loss: 0.0000038603561734\n",
      "Epoch: 9630/20000, Loss: 0.0000038435300667\n",
      "Epoch: 9640/20000, Loss: 0.0000038267435229\n",
      "Epoch: 9650/20000, Loss: 0.0000038099994981\n",
      "Epoch: 9660/20000, Loss: 0.0000037932879877\n",
      "Epoch: 9670/20000, Loss: 0.0000037766146761\n",
      "Epoch: 9680/20000, Loss: 0.0000037599863845\n",
      "Epoch: 9690/20000, Loss: 0.0000037443617202\n",
      "Epoch: 9700/20000, Loss: 0.0000040301151785\n",
      "Epoch: 9710/20000, Loss: 0.0000839805652504\n",
      "Epoch: 9720/20000, Loss: 0.0000191556246136\n",
      "Epoch: 9730/20000, Loss: 0.0000057992333495\n",
      "Epoch: 9740/20000, Loss: 0.0000045642259465\n",
      "Epoch: 9750/20000, Loss: 0.0000045479750952\n",
      "Epoch: 9760/20000, Loss: 0.0000040046625145\n",
      "Epoch: 9770/20000, Loss: 0.0000036990024910\n",
      "Epoch: 9780/20000, Loss: 0.0000036518113120\n",
      "Epoch: 9790/20000, Loss: 0.0000036407477637\n",
      "Epoch: 9800/20000, Loss: 0.0000036131020806\n",
      "Epoch: 9810/20000, Loss: 0.0000035969098917\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 9820/20000, Loss: 0.0000035810048757\n",
      "Epoch: 9830/20000, Loss: 0.0000035656669297\n",
      "Epoch: 9840/20000, Loss: 0.0000035507273424\n",
      "Epoch: 9850/20000, Loss: 0.0000035358925743\n",
      "Epoch: 9860/20000, Loss: 0.0000035211342038\n",
      "Epoch: 9870/20000, Loss: 0.0000035064599615\n",
      "Epoch: 9880/20000, Loss: 0.0000034918455185\n",
      "Epoch: 9890/20000, Loss: 0.0000034772785966\n",
      "Epoch: 9900/20000, Loss: 0.0000034627685181\n",
      "Epoch: 9910/20000, Loss: 0.0000034483002764\n",
      "Epoch: 9920/20000, Loss: 0.0000034338702335\n",
      "Epoch: 9930/20000, Loss: 0.0000034194929412\n",
      "Epoch: 9940/20000, Loss: 0.0000034051506645\n",
      "Epoch: 9950/20000, Loss: 0.0000033908409023\n",
      "Epoch: 9960/20000, Loss: 0.0000033765734315\n",
      "Epoch: 9970/20000, Loss: 0.0000033623471154\n",
      "Epoch: 9980/20000, Loss: 0.0000033481546780\n",
      "Epoch: 9990/20000, Loss: 0.0000033344292660\n",
      "Epoch: 10000/20000, Loss: 0.0000033716567032\n",
      "Epoch: 10010/20000, Loss: 0.0000146894444697\n",
      "Epoch: 10020/20000, Loss: 0.0000229005127039\n",
      "Epoch: 10030/20000, Loss: 0.0000089082559498\n",
      "Epoch: 10040/20000, Loss: 0.0000062377025642\n",
      "Epoch: 10050/20000, Loss: 0.0000045448568926\n",
      "Epoch: 10060/20000, Loss: 0.0000037427828374\n",
      "Epoch: 10070/20000, Loss: 0.0000034254485399\n",
      "Epoch: 10080/20000, Loss: 0.0000032987422856\n",
      "Epoch: 10090/20000, Loss: 0.0000032412276596\n",
      "Epoch: 10100/20000, Loss: 0.0000032130692489\n",
      "Epoch: 10110/20000, Loss: 0.0000031978997868\n",
      "Epoch: 10120/20000, Loss: 0.0000031847609989\n",
      "Epoch: 10130/20000, Loss: 0.0000031703380046\n",
      "Epoch: 10140/20000, Loss: 0.0000031567476526\n",
      "Epoch: 10150/20000, Loss: 0.0000031433319236\n",
      "Epoch: 10160/20000, Loss: 0.0000031300301089\n",
      "Epoch: 10170/20000, Loss: 0.0000031168071928\n",
      "Epoch: 10180/20000, Loss: 0.0000031036611290\n",
      "Epoch: 10190/20000, Loss: 0.0000030905857784\n",
      "Epoch: 10200/20000, Loss: 0.0000030775593132\n",
      "Epoch: 10210/20000, Loss: 0.0000030645931020\n",
      "Epoch: 10220/20000, Loss: 0.0000030516791867\n",
      "Epoch: 10230/20000, Loss: 0.0000030388200685\n",
      "Epoch: 10240/20000, Loss: 0.0000030259993764\n",
      "Epoch: 10250/20000, Loss: 0.0000030132282518\n",
      "Epoch: 10260/20000, Loss: 0.0000030005016924\n",
      "Epoch: 10270/20000, Loss: 0.0000029878247005\n",
      "Epoch: 10280/20000, Loss: 0.0000029755285595\n",
      "Epoch: 10290/20000, Loss: 0.0000030091928238\n",
      "Epoch: 10300/20000, Loss: 0.0000146379552461\n",
      "Epoch: 10310/20000, Loss: 0.0000240364370256\n",
      "Epoch: 10320/20000, Loss: 0.0000107438327177\n",
      "Epoch: 10330/20000, Loss: 0.0000063233028413\n",
      "Epoch: 10340/20000, Loss: 0.0000038526941353\n",
      "Epoch: 10350/20000, Loss: 0.0000030887674711\n",
      "Epoch: 10360/20000, Loss: 0.0000029362513487\n",
      "Epoch: 10370/20000, Loss: 0.0000029002592328\n",
      "Epoch: 10380/20000, Loss: 0.0000028842739539\n",
      "Epoch: 10390/20000, Loss: 0.0000028718909562\n",
      "Epoch: 10400/20000, Loss: 0.0000028597951314\n",
      "Epoch: 10410/20000, Loss: 0.0000028469546578\n",
      "Epoch: 10420/20000, Loss: 0.0000028342394671\n",
      "Epoch: 10430/20000, Loss: 0.0000028221711545\n",
      "Epoch: 10440/20000, Loss: 0.0000028104768717\n",
      "Epoch: 10450/20000, Loss: 0.0000027988141937\n",
      "Epoch: 10460/20000, Loss: 0.0000027872752071\n",
      "Epoch: 10470/20000, Loss: 0.0000027758017040\n",
      "Epoch: 10480/20000, Loss: 0.0000027643977774\n",
      "Epoch: 10490/20000, Loss: 0.0000027530620628\n",
      "Epoch: 10500/20000, Loss: 0.0000027417797810\n",
      "Epoch: 10510/20000, Loss: 0.0000027305547974\n",
      "Epoch: 10520/20000, Loss: 0.0000027193830192\n",
      "Epoch: 10530/20000, Loss: 0.0000027082594443\n",
      "Epoch: 10540/20000, Loss: 0.0000026971906664\n",
      "Epoch: 10550/20000, Loss: 0.0000026861630431\n",
      "Epoch: 10560/20000, Loss: 0.0000026751820315\n",
      "Epoch: 10570/20000, Loss: 0.0000026642601370\n",
      "Epoch: 10580/20000, Loss: 0.0000026548054848\n",
      "Epoch: 10590/20000, Loss: 0.0000030350033740\n",
      "Epoch: 10600/20000, Loss: 0.0000372507092834\n",
      "Epoch: 10610/20000, Loss: 0.0000154459994519\n",
      "Epoch: 10620/20000, Loss: 0.0000040260097194\n",
      "Epoch: 10630/20000, Loss: 0.0000037791919567\n",
      "Epoch: 10640/20000, Loss: 0.0000030817354855\n",
      "Epoch: 10650/20000, Loss: 0.0000026715526928\n",
      "Epoch: 10660/20000, Loss: 0.0000026687371246\n",
      "Epoch: 10670/20000, Loss: 0.0000025837816793\n",
      "Epoch: 10680/20000, Loss: 0.0000025820961582\n",
      "Epoch: 10690/20000, Loss: 0.0000025629194624\n",
      "Epoch: 10700/20000, Loss: 0.0000025526737772\n",
      "Epoch: 10710/20000, Loss: 0.0000025418930818\n",
      "Epoch: 10720/20000, Loss: 0.0000025315882795\n",
      "Epoch: 10730/20000, Loss: 0.0000025218255360\n",
      "Epoch: 10740/20000, Loss: 0.0000025120580176\n",
      "Epoch: 10750/20000, Loss: 0.0000025023887247\n",
      "Epoch: 10760/20000, Loss: 0.0000024928281164\n",
      "Epoch: 10770/20000, Loss: 0.0000024848231988\n",
      "Epoch: 10780/20000, Loss: 0.0000025958195238\n",
      "Epoch: 10790/20000, Loss: 0.0000195863376575\n",
      "Epoch: 10800/20000, Loss: 0.0000207451575989\n",
      "Epoch: 10810/20000, Loss: 0.0000050007083701\n",
      "Epoch: 10820/20000, Loss: 0.0000026713905754\n",
      "Epoch: 10830/20000, Loss: 0.0000024926093829\n",
      "Epoch: 10840/20000, Loss: 0.0000025988410925\n",
      "Epoch: 10850/20000, Loss: 0.0000025495000955\n",
      "Epoch: 10860/20000, Loss: 0.0000024390751605\n",
      "Epoch: 10870/20000, Loss: 0.0000024147777822\n",
      "Epoch: 10880/20000, Loss: 0.0000024073217446\n",
      "Epoch: 10890/20000, Loss: 0.0000023929790132\n",
      "Epoch: 10900/20000, Loss: 0.0000023841066650\n",
      "Epoch: 10910/20000, Loss: 0.0000023747945761\n",
      "Epoch: 10920/20000, Loss: 0.0000023656559733\n",
      "Epoch: 10930/20000, Loss: 0.0000023568063625\n",
      "Epoch: 10940/20000, Loss: 0.0000023480492928\n",
      "Epoch: 10950/20000, Loss: 0.0000023393581614\n",
      "Epoch: 10960/20000, Loss: 0.0000023307209176\n",
      "Epoch: 10970/20000, Loss: 0.0000023221441552\n",
      "Epoch: 10980/20000, Loss: 0.0000023136144591\n",
      "Epoch: 10990/20000, Loss: 0.0000023051309199\n",
      "Epoch: 11000/20000, Loss: 0.0000022966885354\n",
      "Epoch: 11010/20000, Loss: 0.0000022883377824\n",
      "Epoch: 11020/20000, Loss: 0.0000022823103336\n",
      "Epoch: 11030/20000, Loss: 0.0000025633014502\n",
      "Epoch: 11040/20000, Loss: 0.0000472680912935\n",
      "Epoch: 11050/20000, Loss: 0.0000086376803665\n",
      "Epoch: 11060/20000, Loss: 0.0000050421604101\n",
      "Epoch: 11070/20000, Loss: 0.0000031017675610\n",
      "Epoch: 11080/20000, Loss: 0.0000025188555810\n",
      "Epoch: 11090/20000, Loss: 0.0000023672002953\n",
      "Epoch: 11100/20000, Loss: 0.0000023105067157\n",
      "Epoch: 11110/20000, Loss: 0.0000022646063371\n",
      "Epoch: 11120/20000, Loss: 0.0000022300328055\n",
      "Epoch: 11130/20000, Loss: 0.0000022144179184\n",
      "Epoch: 11140/20000, Loss: 0.0000022071399144\n",
      "Epoch: 11150/20000, Loss: 0.0000021977696179\n",
      "Epoch: 11160/20000, Loss: 0.0000021896150884\n",
      "Epoch: 11170/20000, Loss: 0.0000021816824756\n",
      "Epoch: 11180/20000, Loss: 0.0000021739178919\n",
      "Epoch: 11190/20000, Loss: 0.0000021662237941\n",
      "Epoch: 11200/20000, Loss: 0.0000021586115508\n",
      "Epoch: 11210/20000, Loss: 0.0000021510695660\n",
      "Epoch: 11220/20000, Loss: 0.0000021435882900\n",
      "Epoch: 11230/20000, Loss: 0.0000021361454401\n",
      "Epoch: 11240/20000, Loss: 0.0000021287660275\n",
      "Epoch: 11250/20000, Loss: 0.0000021214270873\n",
      "Epoch: 11260/20000, Loss: 0.0000021141252091\n",
      "Epoch: 11270/20000, Loss: 0.0000021068706246\n",
      "Epoch: 11280/20000, Loss: 0.0000020996692456\n",
      "Epoch: 11290/20000, Loss: 0.0000020929644506\n",
      "Epoch: 11300/20000, Loss: 0.0000021317648589\n",
      "Epoch: 11310/20000, Loss: 0.0000104258833744\n",
      "Epoch: 11320/20000, Loss: 0.0000138764617077\n",
      "Epoch: 11330/20000, Loss: 0.0000079583523984\n",
      "Epoch: 11340/20000, Loss: 0.0000053822891459\n",
      "Epoch: 11350/20000, Loss: 0.0000028902975373\n",
      "Epoch: 11360/20000, Loss: 0.0000021551327336\n",
      "Epoch: 11370/20000, Loss: 0.0000020691513782\n",
      "Epoch: 11380/20000, Loss: 0.0000020705019779\n",
      "Epoch: 11390/20000, Loss: 0.0000020539459911\n",
      "Epoch: 11400/20000, Loss: 0.0000020420559395\n",
      "Epoch: 11410/20000, Loss: 0.0000020323559511\n",
      "Epoch: 11420/20000, Loss: 0.0000020249306090\n",
      "Epoch: 11430/20000, Loss: 0.0000020180229967\n",
      "Epoch: 11440/20000, Loss: 0.0000020114312065\n",
      "Epoch: 11450/20000, Loss: 0.0000020048873921\n",
      "Epoch: 11460/20000, Loss: 0.0000019983917809\n",
      "Epoch: 11470/20000, Loss: 0.0000019919812075\n",
      "Epoch: 11480/20000, Loss: 0.0000019856215658\n",
      "Epoch: 11490/20000, Loss: 0.0000019793112642\n",
      "Epoch: 11500/20000, Loss: 0.0000019730489385\n",
      "Epoch: 11510/20000, Loss: 0.0000019668286768\n",
      "Epoch: 11520/20000, Loss: 0.0000019606457045\n",
      "Epoch: 11530/20000, Loss: 0.0000019545768737\n",
      "Epoch: 11540/20000, Loss: 0.0000019542762857\n",
      "Epoch: 11550/20000, Loss: 0.0000029016150620\n",
      "Epoch: 11560/20000, Loss: 0.0000423708843300\n",
      "Epoch: 11570/20000, Loss: 0.0000069494508352\n",
      "Epoch: 11580/20000, Loss: 0.0000028386511985\n",
      "Epoch: 11590/20000, Loss: 0.0000024415701319\n",
      "Epoch: 11600/20000, Loss: 0.0000023567640710\n",
      "Epoch: 11610/20000, Loss: 0.0000020650861643\n",
      "Epoch: 11620/20000, Loss: 0.0000019615101792\n",
      "Epoch: 11630/20000, Loss: 0.0000019379822334\n",
      "Epoch: 11640/20000, Loss: 0.0000019114731913\n",
      "Epoch: 11650/20000, Loss: 0.0000019047716933\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 11660/20000, Loss: 0.0000018964115043\n",
      "Epoch: 11670/20000, Loss: 0.0000018899222596\n",
      "Epoch: 11680/20000, Loss: 0.0000018839898530\n",
      "Epoch: 11690/20000, Loss: 0.0000018782208144\n",
      "Epoch: 11700/20000, Loss: 0.0000018725625068\n",
      "Epoch: 11710/20000, Loss: 0.0000018669578594\n",
      "Epoch: 11720/20000, Loss: 0.0000018614194914\n",
      "Epoch: 11730/20000, Loss: 0.0000018559343289\n",
      "Epoch: 11740/20000, Loss: 0.0000018504871377\n",
      "Epoch: 11750/20000, Loss: 0.0000018450830339\n",
      "Epoch: 11760/20000, Loss: 0.0000018397214490\n",
      "Epoch: 11770/20000, Loss: 0.0000018344538830\n",
      "Epoch: 11780/20000, Loss: 0.0000018343695274\n",
      "Epoch: 11790/20000, Loss: 0.0000027176436106\n",
      "Epoch: 11800/20000, Loss: 0.0000525335126440\n",
      "Epoch: 11810/20000, Loss: 0.0000110976334327\n",
      "Epoch: 11820/20000, Loss: 0.0000049909644986\n",
      "Epoch: 11830/20000, Loss: 0.0000025536432986\n",
      "Epoch: 11840/20000, Loss: 0.0000019900019197\n",
      "Epoch: 11850/20000, Loss: 0.0000018286065142\n",
      "Epoch: 11860/20000, Loss: 0.0000018241031512\n",
      "Epoch: 11870/20000, Loss: 0.0000018155253656\n",
      "Epoch: 11880/20000, Loss: 0.0000018045598154\n",
      "Epoch: 11890/20000, Loss: 0.0000017948971163\n",
      "Epoch: 11900/20000, Loss: 0.0000017890632762\n",
      "Epoch: 11910/20000, Loss: 0.0000017827575221\n",
      "Epoch: 11920/20000, Loss: 0.0000017775589640\n",
      "Epoch: 11930/20000, Loss: 0.0000017724939880\n",
      "Epoch: 11940/20000, Loss: 0.0000017675207573\n",
      "Epoch: 11950/20000, Loss: 0.0000017626417730\n",
      "Epoch: 11960/20000, Loss: 0.0000017578059897\n",
      "Epoch: 11970/20000, Loss: 0.0000017530326204\n",
      "Epoch: 11980/20000, Loss: 0.0000017482949488\n",
      "Epoch: 11990/20000, Loss: 0.0000017435959307\n",
      "Epoch: 12000/20000, Loss: 0.0000017389376126\n",
      "Epoch: 12010/20000, Loss: 0.0000017343127183\n",
      "Epoch: 12020/20000, Loss: 0.0000017297190880\n",
      "Epoch: 12030/20000, Loss: 0.0000017251702502\n",
      "Epoch: 12040/20000, Loss: 0.0000017210053329\n",
      "Epoch: 12050/20000, Loss: 0.0000017460986328\n",
      "Epoch: 12060/20000, Loss: 0.0000064439291236\n",
      "Epoch: 12070/20000, Loss: 0.0000089279938038\n",
      "Epoch: 12080/20000, Loss: 0.0000047073972382\n",
      "Epoch: 12090/20000, Loss: 0.0000028443530482\n",
      "Epoch: 12100/20000, Loss: 0.0000026154443731\n",
      "Epoch: 12110/20000, Loss: 0.0000020530121674\n",
      "Epoch: 12120/20000, Loss: 0.0000017784208239\n",
      "Epoch: 12130/20000, Loss: 0.0000017248299855\n",
      "Epoch: 12140/20000, Loss: 0.0000016998317278\n",
      "Epoch: 12150/20000, Loss: 0.0000016922656414\n",
      "Epoch: 12160/20000, Loss: 0.0000016868241346\n",
      "Epoch: 12170/20000, Loss: 0.0000016812796275\n",
      "Epoch: 12180/20000, Loss: 0.0000016762348878\n",
      "Epoch: 12190/20000, Loss: 0.0000016716506934\n",
      "Epoch: 12200/20000, Loss: 0.0000016673325263\n",
      "Epoch: 12210/20000, Loss: 0.0000016630831396\n",
      "Epoch: 12220/20000, Loss: 0.0000016588949165\n",
      "Epoch: 12230/20000, Loss: 0.0000016547562609\n",
      "Epoch: 12240/20000, Loss: 0.0000016506635347\n",
      "Epoch: 12250/20000, Loss: 0.0000016466171928\n",
      "Epoch: 12260/20000, Loss: 0.0000016429356720\n",
      "Epoch: 12270/20000, Loss: 0.0000016758659740\n",
      "Epoch: 12280/20000, Loss: 0.0000093499211289\n",
      "Epoch: 12290/20000, Loss: 0.0000111064719022\n",
      "Epoch: 12300/20000, Loss: 0.0000070762434916\n",
      "Epoch: 12310/20000, Loss: 0.0000037937745674\n",
      "Epoch: 12320/20000, Loss: 0.0000024208868581\n",
      "Epoch: 12330/20000, Loss: 0.0000017573566993\n",
      "Epoch: 12340/20000, Loss: 0.0000016505717895\n",
      "Epoch: 12350/20000, Loss: 0.0000016431886252\n",
      "Epoch: 12360/20000, Loss: 0.0000016227968445\n",
      "Epoch: 12370/20000, Loss: 0.0000016195883745\n",
      "Epoch: 12380/20000, Loss: 0.0000016138581032\n",
      "Epoch: 12390/20000, Loss: 0.0000016096374793\n",
      "Epoch: 12400/20000, Loss: 0.0000016053450054\n",
      "Epoch: 12410/20000, Loss: 0.0000016013432287\n",
      "Epoch: 12420/20000, Loss: 0.0000015975689394\n",
      "Epoch: 12430/20000, Loss: 0.0000015938496745\n",
      "Epoch: 12440/20000, Loss: 0.0000015901709958\n",
      "Epoch: 12450/20000, Loss: 0.0000015865391561\n",
      "Epoch: 12460/20000, Loss: 0.0000015829415361\n",
      "Epoch: 12470/20000, Loss: 0.0000015793763168\n",
      "Epoch: 12480/20000, Loss: 0.0000015758399741\n",
      "Epoch: 12490/20000, Loss: 0.0000015723798015\n",
      "Epoch: 12500/20000, Loss: 0.0000015711361812\n",
      "Epoch: 12510/20000, Loss: 0.0000017942577415\n",
      "Epoch: 12520/20000, Loss: 0.0000330047623720\n",
      "Epoch: 12530/20000, Loss: 0.0000139356507134\n",
      "Epoch: 12540/20000, Loss: 0.0000055504324337\n",
      "Epoch: 12550/20000, Loss: 0.0000023667928417\n",
      "Epoch: 12560/20000, Loss: 0.0000018677499156\n",
      "Epoch: 12570/20000, Loss: 0.0000017611622525\n",
      "Epoch: 12580/20000, Loss: 0.0000016352259991\n",
      "Epoch: 12590/20000, Loss: 0.0000015787512666\n",
      "Epoch: 12600/20000, Loss: 0.0000015593121816\n",
      "Epoch: 12610/20000, Loss: 0.0000015476505268\n",
      "Epoch: 12620/20000, Loss: 0.0000015446955786\n",
      "Epoch: 12630/20000, Loss: 0.0000015403375073\n",
      "Epoch: 12640/20000, Loss: 0.0000015365317267\n",
      "Epoch: 12650/20000, Loss: 0.0000015330197130\n",
      "Epoch: 12660/20000, Loss: 0.0000015296461697\n",
      "Epoch: 12670/20000, Loss: 0.0000015263123032\n",
      "Epoch: 12680/20000, Loss: 0.0000015230411918\n",
      "Epoch: 12690/20000, Loss: 0.0000015198046412\n",
      "Epoch: 12700/20000, Loss: 0.0000015165996956\n",
      "Epoch: 12710/20000, Loss: 0.0000015134282876\n",
      "Epoch: 12720/20000, Loss: 0.0000015102849602\n",
      "Epoch: 12730/20000, Loss: 0.0000015071728967\n",
      "Epoch: 12740/20000, Loss: 0.0000015048677824\n",
      "Epoch: 12750/20000, Loss: 0.0000016089627479\n",
      "Epoch: 12760/20000, Loss: 0.0000227864256885\n",
      "Epoch: 12770/20000, Loss: 0.0000099048784250\n",
      "Epoch: 12780/20000, Loss: 0.0000024282815048\n",
      "Epoch: 12790/20000, Loss: 0.0000020450777356\n",
      "Epoch: 12800/20000, Loss: 0.0000021410910449\n",
      "Epoch: 12810/20000, Loss: 0.0000017008221675\n",
      "Epoch: 12820/20000, Loss: 0.0000015342773168\n",
      "Epoch: 12830/20000, Loss: 0.0000015124038555\n",
      "Epoch: 12840/20000, Loss: 0.0000014990120007\n",
      "Epoch: 12850/20000, Loss: 0.0000014898160998\n",
      "Epoch: 12860/20000, Loss: 0.0000014847543071\n",
      "Epoch: 12870/20000, Loss: 0.0000014810665334\n",
      "Epoch: 12880/20000, Loss: 0.0000014777589286\n",
      "Epoch: 12890/20000, Loss: 0.0000014746163970\n",
      "Epoch: 12900/20000, Loss: 0.0000014715830048\n",
      "Epoch: 12910/20000, Loss: 0.0000014686396526\n",
      "Epoch: 12920/20000, Loss: 0.0000014657335896\n",
      "Epoch: 12930/20000, Loss: 0.0000014628742520\n",
      "Epoch: 12940/20000, Loss: 0.0000014603003820\n",
      "Epoch: 12950/20000, Loss: 0.0000014748616195\n",
      "Epoch: 12960/20000, Loss: 0.0000038690882320\n",
      "Epoch: 12970/20000, Loss: 0.0000113486239570\n",
      "Epoch: 12980/20000, Loss: 0.0000079918745541\n",
      "Epoch: 12990/20000, Loss: 0.0000021472103526\n",
      "Epoch: 13000/20000, Loss: 0.0000015034858052\n",
      "Epoch: 13010/20000, Loss: 0.0000016450446765\n",
      "Epoch: 13020/20000, Loss: 0.0000015144356666\n",
      "Epoch: 13030/20000, Loss: 0.0000014542409872\n",
      "Epoch: 13040/20000, Loss: 0.0000014602562715\n",
      "Epoch: 13050/20000, Loss: 0.0000014458347550\n",
      "Epoch: 13060/20000, Loss: 0.0000014413417375\n",
      "Epoch: 13070/20000, Loss: 0.0000014374081729\n",
      "Epoch: 13080/20000, Loss: 0.0000014341251244\n",
      "Epoch: 13090/20000, Loss: 0.0000014311332279\n",
      "Epoch: 13100/20000, Loss: 0.0000014283506289\n",
      "Epoch: 13110/20000, Loss: 0.0000014256249870\n",
      "Epoch: 13120/20000, Loss: 0.0000014229472072\n",
      "Epoch: 13130/20000, Loss: 0.0000014202929606\n",
      "Epoch: 13140/20000, Loss: 0.0000014176778222\n",
      "Epoch: 13150/20000, Loss: 0.0000014150886045\n",
      "Epoch: 13160/20000, Loss: 0.0000014125449752\n",
      "Epoch: 13170/20000, Loss: 0.0000014108749156\n",
      "Epoch: 13180/20000, Loss: 0.0000014758055613\n",
      "Epoch: 13190/20000, Loss: 0.0000114567174023\n",
      "Epoch: 13200/20000, Loss: 0.0000109844704639\n",
      "Epoch: 13210/20000, Loss: 0.0000018198560383\n",
      "Epoch: 13220/20000, Loss: 0.0000016860317373\n",
      "Epoch: 13230/20000, Loss: 0.0000017419569076\n",
      "Epoch: 13240/20000, Loss: 0.0000016522634496\n",
      "Epoch: 13250/20000, Loss: 0.0000015222672118\n",
      "Epoch: 13260/20000, Loss: 0.0000014185504824\n",
      "Epoch: 13270/20000, Loss: 0.0000014030624698\n",
      "Epoch: 13280/20000, Loss: 0.0000014027015141\n",
      "Epoch: 13290/20000, Loss: 0.0000013945325463\n",
      "Epoch: 13300/20000, Loss: 0.0000013924363884\n",
      "Epoch: 13310/20000, Loss: 0.0000013890996797\n",
      "Epoch: 13320/20000, Loss: 0.0000013864315633\n",
      "Epoch: 13330/20000, Loss: 0.0000013838736095\n",
      "Epoch: 13340/20000, Loss: 0.0000013813362330\n",
      "Epoch: 13350/20000, Loss: 0.0000013788466049\n",
      "Epoch: 13360/20000, Loss: 0.0000013763948346\n",
      "Epoch: 13370/20000, Loss: 0.0000013739746691\n",
      "Epoch: 13380/20000, Loss: 0.0000013715850855\n",
      "Epoch: 13390/20000, Loss: 0.0000013692742868\n",
      "Epoch: 13400/20000, Loss: 0.0000013706054460\n",
      "Epoch: 13410/20000, Loss: 0.0000018499820271\n",
      "Epoch: 13420/20000, Loss: 0.0000237889853452\n",
      "Epoch: 13430/20000, Loss: 0.0000039914798435\n",
      "Epoch: 13440/20000, Loss: 0.0000020075196971\n",
      "Epoch: 13450/20000, Loss: 0.0000015941943730\n",
      "Epoch: 13460/20000, Loss: 0.0000014141789961\n",
      "Epoch: 13470/20000, Loss: 0.0000013865121673\n",
      "Epoch: 13480/20000, Loss: 0.0000013847212585\n",
      "Epoch: 13490/20000, Loss: 0.0000014856561847\n",
      "Epoch: 13500/20000, Loss: 0.0000039980754991\n",
      "Epoch: 13510/20000, Loss: 0.0000105028348116\n",
      "Epoch: 13520/20000, Loss: 0.0000026288414574\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 13530/20000, Loss: 0.0000013715920204\n",
      "Epoch: 13540/20000, Loss: 0.0000014250174445\n",
      "Epoch: 13550/20000, Loss: 0.0000014060399280\n",
      "Epoch: 13560/20000, Loss: 0.0000013597796169\n",
      "Epoch: 13570/20000, Loss: 0.0000013425224097\n",
      "Epoch: 13580/20000, Loss: 0.0000013503375840\n",
      "Epoch: 13590/20000, Loss: 0.0000013394468397\n",
      "Epoch: 13600/20000, Loss: 0.0000013410067368\n",
      "Epoch: 13610/20000, Loss: 0.0000013494948234\n",
      "Epoch: 13620/20000, Loss: 0.0000015542874507\n",
      "Epoch: 13630/20000, Loss: 0.0000087476200861\n",
      "Epoch: 13640/20000, Loss: 0.0000015296765241\n",
      "Epoch: 13650/20000, Loss: 0.0000036592120978\n",
      "Epoch: 13660/20000, Loss: 0.0000025105987334\n",
      "Epoch: 13670/20000, Loss: 0.0000014015860188\n",
      "Epoch: 13680/20000, Loss: 0.0000013526222347\n",
      "Epoch: 13690/20000, Loss: 0.0000013481594578\n",
      "Epoch: 13700/20000, Loss: 0.0000013328453861\n",
      "Epoch: 13710/20000, Loss: 0.0000013204215747\n",
      "Epoch: 13720/20000, Loss: 0.0000013171704722\n",
      "Epoch: 13730/20000, Loss: 0.0000013161909465\n",
      "Epoch: 13740/20000, Loss: 0.0000013120164795\n",
      "Epoch: 13750/20000, Loss: 0.0000013097410374\n",
      "Epoch: 13760/20000, Loss: 0.0000013084521697\n",
      "Epoch: 13770/20000, Loss: 0.0000013304180584\n",
      "Epoch: 13780/20000, Loss: 0.0000029502573398\n",
      "Epoch: 13790/20000, Loss: 0.0000264650643658\n",
      "Epoch: 13800/20000, Loss: 0.0000029403595363\n",
      "Epoch: 13810/20000, Loss: 0.0000024048561045\n",
      "Epoch: 13820/20000, Loss: 0.0000023238394533\n",
      "Epoch: 13830/20000, Loss: 0.0000013818719253\n",
      "Epoch: 13840/20000, Loss: 0.0000014133660216\n",
      "Epoch: 13850/20000, Loss: 0.0000013206854419\n",
      "Epoch: 13860/20000, Loss: 0.0000013142408761\n",
      "Epoch: 13870/20000, Loss: 0.0000012965101632\n",
      "Epoch: 13880/20000, Loss: 0.0000012949842585\n",
      "Epoch: 13890/20000, Loss: 0.0000012921717598\n",
      "Epoch: 13900/20000, Loss: 0.0000012895195596\n",
      "Epoch: 13910/20000, Loss: 0.0000012871341823\n",
      "Epoch: 13920/20000, Loss: 0.0000012849324094\n",
      "Epoch: 13930/20000, Loss: 0.0000012828735407\n",
      "Epoch: 13940/20000, Loss: 0.0000012827354112\n",
      "Epoch: 13950/20000, Loss: 0.0000014128007706\n",
      "Epoch: 13960/20000, Loss: 0.0000141771261042\n",
      "Epoch: 13970/20000, Loss: 0.0000089869517979\n",
      "Epoch: 13980/20000, Loss: 0.0000030207306736\n",
      "Epoch: 13990/20000, Loss: 0.0000014764851812\n",
      "Epoch: 14000/20000, Loss: 0.0000013402240029\n",
      "Epoch: 14010/20000, Loss: 0.0000013834925312\n",
      "Epoch: 14020/20000, Loss: 0.0000013064653785\n",
      "Epoch: 14030/20000, Loss: 0.0000012744210380\n",
      "Epoch: 14040/20000, Loss: 0.0000013158650063\n",
      "Epoch: 14050/20000, Loss: 0.0000026375701054\n",
      "Epoch: 14060/20000, Loss: 0.0000201866168936\n",
      "Epoch: 14070/20000, Loss: 0.0000038264347495\n",
      "Epoch: 14080/20000, Loss: 0.0000015975122096\n",
      "Epoch: 14090/20000, Loss: 0.0000019830451947\n",
      "Epoch: 14100/20000, Loss: 0.0000014268200630\n",
      "Epoch: 14110/20000, Loss: 0.0000012718087419\n",
      "Epoch: 14120/20000, Loss: 0.0000012619675545\n",
      "Epoch: 14130/20000, Loss: 0.0000012578707356\n",
      "Epoch: 14140/20000, Loss: 0.0000012567749081\n",
      "Epoch: 14150/20000, Loss: 0.0000012558158460\n",
      "Epoch: 14160/20000, Loss: 0.0000012515318986\n",
      "Epoch: 14170/20000, Loss: 0.0000012501635638\n",
      "Epoch: 14180/20000, Loss: 0.0000012488883385\n",
      "Epoch: 14190/20000, Loss: 0.0000012602251900\n",
      "Epoch: 14200/20000, Loss: 0.0000017296729311\n",
      "Epoch: 14210/20000, Loss: 0.0000219673802349\n",
      "Epoch: 14220/20000, Loss: 0.0000109320308184\n",
      "Epoch: 14230/20000, Loss: 0.0000014742000758\n",
      "Epoch: 14240/20000, Loss: 0.0000023355830763\n",
      "Epoch: 14250/20000, Loss: 0.0000013081844372\n",
      "Epoch: 14260/20000, Loss: 0.0000013785934243\n",
      "Epoch: 14270/20000, Loss: 0.0000012782738850\n",
      "Epoch: 14280/20000, Loss: 0.0000012402716720\n",
      "Epoch: 14290/20000, Loss: 0.0000012364653230\n",
      "Epoch: 14300/20000, Loss: 0.0000012342568425\n",
      "Epoch: 14310/20000, Loss: 0.0000012318143945\n",
      "Epoch: 14320/20000, Loss: 0.0000012298418142\n",
      "Epoch: 14330/20000, Loss: 0.0000012280214605\n",
      "Epoch: 14340/20000, Loss: 0.0000012259173445\n",
      "Epoch: 14350/20000, Loss: 0.0000012246487131\n",
      "Epoch: 14360/20000, Loss: 0.0000012443023252\n",
      "Epoch: 14370/20000, Loss: 0.0000029834345696\n",
      "Epoch: 14380/20000, Loss: 0.0000065149670263\n",
      "Epoch: 14390/20000, Loss: 0.0000048628289733\n",
      "Epoch: 14400/20000, Loss: 0.0000017541793795\n",
      "Epoch: 14410/20000, Loss: 0.0000013710432540\n",
      "Epoch: 14420/20000, Loss: 0.0000014508905224\n",
      "Epoch: 14430/20000, Loss: 0.0000013630826743\n",
      "Epoch: 14440/20000, Loss: 0.0000019289393549\n",
      "Epoch: 14450/20000, Loss: 0.0000088841370598\n",
      "Epoch: 14460/20000, Loss: 0.0000015578021930\n",
      "Epoch: 14470/20000, Loss: 0.0000012473519746\n",
      "Epoch: 14480/20000, Loss: 0.0000012347535403\n",
      "Epoch: 14490/20000, Loss: 0.0000013332312392\n",
      "Epoch: 14500/20000, Loss: 0.0000013123922145\n",
      "Epoch: 14510/20000, Loss: 0.0000012085499748\n",
      "Epoch: 14520/20000, Loss: 0.0000012231839719\n",
      "Epoch: 14530/20000, Loss: 0.0000012963637346\n",
      "Epoch: 14540/20000, Loss: 0.0000024766588922\n",
      "Epoch: 14550/20000, Loss: 0.0000154403587658\n",
      "Epoch: 14560/20000, Loss: 0.0000055664163483\n",
      "Epoch: 14570/20000, Loss: 0.0000028447914246\n",
      "Epoch: 14580/20000, Loss: 0.0000017207981955\n",
      "Epoch: 14590/20000, Loss: 0.0000013873878970\n",
      "Epoch: 14600/20000, Loss: 0.0000012881527027\n",
      "Epoch: 14610/20000, Loss: 0.0000012213010905\n",
      "Epoch: 14620/20000, Loss: 0.0000011928370895\n",
      "Epoch: 14630/20000, Loss: 0.0000011983428294\n",
      "Epoch: 14640/20000, Loss: 0.0000012026440572\n",
      "Epoch: 14650/20000, Loss: 0.0000012730157550\n",
      "Epoch: 14660/20000, Loss: 0.0000030917194636\n",
      "Epoch: 14670/20000, Loss: 0.0000166456884472\n",
      "Epoch: 14680/20000, Loss: 0.0000040849658944\n",
      "Epoch: 14690/20000, Loss: 0.0000012586319826\n",
      "Epoch: 14700/20000, Loss: 0.0000015509239120\n",
      "Epoch: 14710/20000, Loss: 0.0000014167330846\n",
      "Epoch: 14720/20000, Loss: 0.0000012768633724\n",
      "Epoch: 14730/20000, Loss: 0.0000012156548337\n",
      "Epoch: 14740/20000, Loss: 0.0000011902319557\n",
      "Epoch: 14750/20000, Loss: 0.0000011769159300\n",
      "Epoch: 14760/20000, Loss: 0.0000011774990298\n",
      "Epoch: 14770/20000, Loss: 0.0000012037695569\n",
      "Epoch: 14780/20000, Loss: 0.0000026388413517\n",
      "Epoch: 14790/20000, Loss: 0.0000071601466516\n",
      "Epoch: 14800/20000, Loss: 0.0000016629545598\n",
      "Epoch: 14810/20000, Loss: 0.0000021173584628\n",
      "Epoch: 14820/20000, Loss: 0.0000012718937796\n",
      "Epoch: 14830/20000, Loss: 0.0000014342607528\n",
      "Epoch: 14840/20000, Loss: 0.0000024622886485\n",
      "Epoch: 14850/20000, Loss: 0.0000116741857710\n",
      "Epoch: 14860/20000, Loss: 0.0000040635254663\n",
      "Epoch: 14870/20000, Loss: 0.0000022807109872\n",
      "Epoch: 14880/20000, Loss: 0.0000014934117871\n",
      "Epoch: 14890/20000, Loss: 0.0000012044138202\n",
      "Epoch: 14900/20000, Loss: 0.0000011741497019\n",
      "Epoch: 14910/20000, Loss: 0.0000011971911817\n",
      "Epoch: 14920/20000, Loss: 0.0000011713377717\n",
      "Epoch: 14930/20000, Loss: 0.0000011652913372\n",
      "Epoch: 14940/20000, Loss: 0.0000012574072343\n",
      "Epoch: 14950/20000, Loss: 0.0000043821446525\n",
      "Epoch: 14960/20000, Loss: 0.0000088616434368\n",
      "Epoch: 14970/20000, Loss: 0.0000013358729802\n",
      "Epoch: 14980/20000, Loss: 0.0000024261830731\n",
      "Epoch: 14990/20000, Loss: 0.0000016129814639\n",
      "Epoch: 15000/20000, Loss: 0.0000012045253470\n",
      "Epoch: 15010/20000, Loss: 0.0000011494153114\n",
      "Epoch: 15020/20000, Loss: 0.0000011488288010\n",
      "Epoch: 15030/20000, Loss: 0.0000011438800129\n",
      "Epoch: 15040/20000, Loss: 0.0000011433473901\n",
      "Epoch: 15050/20000, Loss: 0.0000011418584336\n",
      "Epoch: 15060/20000, Loss: 0.0000011379679563\n",
      "Epoch: 15070/20000, Loss: 0.0000011364595593\n",
      "Epoch: 15080/20000, Loss: 0.0000011377925375\n",
      "Epoch: 15090/20000, Loss: 0.0000012408459042\n",
      "Epoch: 15100/20000, Loss: 0.0000090063585958\n",
      "Epoch: 15110/20000, Loss: 0.0000071164872679\n",
      "Epoch: 15120/20000, Loss: 0.0000018604695242\n",
      "Epoch: 15130/20000, Loss: 0.0000020076047349\n",
      "Epoch: 15140/20000, Loss: 0.0000014121468439\n",
      "Epoch: 15150/20000, Loss: 0.0000012129079323\n",
      "Epoch: 15160/20000, Loss: 0.0000011586323581\n",
      "Epoch: 15170/20000, Loss: 0.0000011582353636\n",
      "Epoch: 15180/20000, Loss: 0.0000023234420041\n",
      "Epoch: 15190/20000, Loss: 0.0000190606460819\n",
      "Epoch: 15200/20000, Loss: 0.0000020137240426\n",
      "Epoch: 15210/20000, Loss: 0.0000027619712455\n",
      "Epoch: 15220/20000, Loss: 0.0000013720232346\n",
      "Epoch: 15230/20000, Loss: 0.0000012260526319\n",
      "Epoch: 15240/20000, Loss: 0.0000012192639360\n",
      "Epoch: 15250/20000, Loss: 0.0000011481619140\n",
      "Epoch: 15260/20000, Loss: 0.0000011241190805\n",
      "Epoch: 15270/20000, Loss: 0.0000011192064449\n",
      "Epoch: 15280/20000, Loss: 0.0000011164032685\n",
      "Epoch: 15290/20000, Loss: 0.0000011142607264\n",
      "Epoch: 15300/20000, Loss: 0.0000011116858332\n",
      "Epoch: 15310/20000, Loss: 0.0000011101762993\n",
      "Epoch: 15320/20000, Loss: 0.0000011084918015\n",
      "Epoch: 15330/20000, Loss: 0.0000011079346223\n",
      "Epoch: 15340/20000, Loss: 0.0000011377634337\n",
      "Epoch: 15350/20000, Loss: 0.0000031539923384\n",
      "Epoch: 15360/20000, Loss: 0.0000182574422070\n",
      "Epoch: 15370/20000, Loss: 0.0000032537932384\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 15380/20000, Loss: 0.0000020334352939\n",
      "Epoch: 15390/20000, Loss: 0.0000018962007289\n",
      "Epoch: 15400/20000, Loss: 0.0000011578355270\n",
      "Epoch: 15410/20000, Loss: 0.0000012131711173\n",
      "Epoch: 15420/20000, Loss: 0.0000011069911352\n",
      "Epoch: 15430/20000, Loss: 0.0000011126600157\n",
      "Epoch: 15440/20000, Loss: 0.0000011029236475\n",
      "Epoch: 15450/20000, Loss: 0.0000010974074485\n",
      "Epoch: 15460/20000, Loss: 0.0000010947699138\n",
      "Epoch: 15470/20000, Loss: 0.0000010929368273\n",
      "Epoch: 15480/20000, Loss: 0.0000010912516473\n",
      "Epoch: 15490/20000, Loss: 0.0000010896204685\n",
      "Epoch: 15500/20000, Loss: 0.0000010884153880\n",
      "Epoch: 15510/20000, Loss: 0.0000011017256156\n",
      "Epoch: 15520/20000, Loss: 0.0000021665268832\n",
      "Epoch: 15530/20000, Loss: 0.0000155404795805\n",
      "Epoch: 15540/20000, Loss: 0.0000025133074359\n",
      "Epoch: 15550/20000, Loss: 0.0000016408151851\n",
      "Epoch: 15560/20000, Loss: 0.0000016333848407\n",
      "Epoch: 15570/20000, Loss: 0.0000012095113107\n",
      "Epoch: 15580/20000, Loss: 0.0000010922366300\n",
      "Epoch: 15590/20000, Loss: 0.0000011163650697\n",
      "Epoch: 15600/20000, Loss: 0.0000010959163319\n",
      "Epoch: 15610/20000, Loss: 0.0000012415039237\n",
      "Epoch: 15620/20000, Loss: 0.0000054307597566\n",
      "Epoch: 15630/20000, Loss: 0.0000022759090825\n",
      "Epoch: 15640/20000, Loss: 0.0000013845811964\n",
      "Epoch: 15650/20000, Loss: 0.0000017256318188\n",
      "Epoch: 15660/20000, Loss: 0.0000014562311890\n",
      "Epoch: 15670/20000, Loss: 0.0000012239748912\n",
      "Epoch: 15680/20000, Loss: 0.0000011319636997\n",
      "Epoch: 15690/20000, Loss: 0.0000010851623529\n",
      "Epoch: 15700/20000, Loss: 0.0000010680666946\n",
      "Epoch: 15710/20000, Loss: 0.0000010716025827\n",
      "Epoch: 15720/20000, Loss: 0.0000010658635574\n",
      "Epoch: 15730/20000, Loss: 0.0000010638894992\n",
      "Epoch: 15740/20000, Loss: 0.0000010715552889\n",
      "Epoch: 15750/20000, Loss: 0.0000014588392787\n",
      "Epoch: 15760/20000, Loss: 0.0000213079947571\n",
      "Epoch: 15770/20000, Loss: 0.0000105569533844\n",
      "Epoch: 15780/20000, Loss: 0.0000016577292854\n",
      "Epoch: 15790/20000, Loss: 0.0000019120648176\n",
      "Epoch: 15800/20000, Loss: 0.0000012622527947\n",
      "Epoch: 15810/20000, Loss: 0.0000011800616448\n",
      "Epoch: 15820/20000, Loss: 0.0000010638112826\n",
      "Epoch: 15830/20000, Loss: 0.0000010758005828\n",
      "Epoch: 15840/20000, Loss: 0.0000010609711580\n",
      "Epoch: 15850/20000, Loss: 0.0000010544179077\n",
      "Epoch: 15860/20000, Loss: 0.0000010512023891\n",
      "Epoch: 15870/20000, Loss: 0.0000010494686649\n",
      "Epoch: 15880/20000, Loss: 0.0000010477264141\n",
      "Epoch: 15890/20000, Loss: 0.0000010460325939\n",
      "Epoch: 15900/20000, Loss: 0.0000010465627156\n",
      "Epoch: 15910/20000, Loss: 0.0000011634274415\n",
      "Epoch: 15920/20000, Loss: 0.0000114984550237\n",
      "Epoch: 15930/20000, Loss: 0.0000090290877779\n",
      "Epoch: 15940/20000, Loss: 0.0000017606772644\n",
      "Epoch: 15950/20000, Loss: 0.0000015250909655\n",
      "Epoch: 15960/20000, Loss: 0.0000013852979919\n",
      "Epoch: 15970/20000, Loss: 0.0000011171888445\n",
      "Epoch: 15980/20000, Loss: 0.0000010451075241\n",
      "Epoch: 15990/20000, Loss: 0.0000010570935274\n",
      "Epoch: 16000/20000, Loss: 0.0000010897981610\n",
      "Epoch: 16010/20000, Loss: 0.0000023299155600\n",
      "Epoch: 16020/20000, Loss: 0.0000158487055160\n",
      "Epoch: 16030/20000, Loss: 0.0000040908830670\n",
      "Epoch: 16040/20000, Loss: 0.0000011163848512\n",
      "Epoch: 16050/20000, Loss: 0.0000012034050769\n",
      "Epoch: 16060/20000, Loss: 0.0000011947938674\n",
      "Epoch: 16070/20000, Loss: 0.0000011055567484\n",
      "Epoch: 16080/20000, Loss: 0.0000010552709000\n",
      "Epoch: 16090/20000, Loss: 0.0000010304136140\n",
      "Epoch: 16100/20000, Loss: 0.0000010262738215\n",
      "Epoch: 16110/20000, Loss: 0.0000010260299632\n",
      "Epoch: 16120/20000, Loss: 0.0000010237987453\n",
      "Epoch: 16130/20000, Loss: 0.0000010241540167\n",
      "Epoch: 16140/20000, Loss: 0.0000010697925745\n",
      "Epoch: 16150/20000, Loss: 0.0000030077258089\n",
      "Epoch: 16160/20000, Loss: 0.0000157315844262\n",
      "Epoch: 16170/20000, Loss: 0.0000015658998791\n",
      "Epoch: 16180/20000, Loss: 0.0000028164470223\n",
      "Epoch: 16190/20000, Loss: 0.0000011833114968\n",
      "Epoch: 16200/20000, Loss: 0.0000011392829720\n",
      "Epoch: 16210/20000, Loss: 0.0000011144188647\n",
      "Epoch: 16220/20000, Loss: 0.0000010368313497\n",
      "Epoch: 16230/20000, Loss: 0.0000010170698488\n",
      "Epoch: 16240/20000, Loss: 0.0000010121450487\n",
      "Epoch: 16250/20000, Loss: 0.0000010102640999\n",
      "Epoch: 16260/20000, Loss: 0.0000010082653716\n",
      "Epoch: 16270/20000, Loss: 0.0000010058718090\n",
      "Epoch: 16280/20000, Loss: 0.0000010045913541\n",
      "Epoch: 16290/20000, Loss: 0.0000010081970458\n",
      "Epoch: 16300/20000, Loss: 0.0000014727360167\n",
      "Epoch: 16310/20000, Loss: 0.0000221595055336\n",
      "Epoch: 16320/20000, Loss: 0.0000016559239384\n",
      "Epoch: 16330/20000, Loss: 0.0000020633722215\n",
      "Epoch: 16340/20000, Loss: 0.0000016552223769\n",
      "Epoch: 16350/20000, Loss: 0.0000012122275166\n",
      "Epoch: 16360/20000, Loss: 0.0000010361586646\n",
      "Epoch: 16370/20000, Loss: 0.0000010221432376\n",
      "Epoch: 16380/20000, Loss: 0.0000011002434803\n",
      "Epoch: 16390/20000, Loss: 0.0000027254329780\n",
      "Epoch: 16400/20000, Loss: 0.0000108038866529\n",
      "Epoch: 16410/20000, Loss: 0.0000034476468045\n",
      "Epoch: 16420/20000, Loss: 0.0000012948180483\n",
      "Epoch: 16430/20000, Loss: 0.0000010114885072\n",
      "Epoch: 16440/20000, Loss: 0.0000009943300938\n",
      "Epoch: 16450/20000, Loss: 0.0000009982115898\n",
      "Epoch: 16460/20000, Loss: 0.0000010094947811\n",
      "Epoch: 16470/20000, Loss: 0.0000009974239674\n",
      "Epoch: 16480/20000, Loss: 0.0000009877846878\n",
      "Epoch: 16490/20000, Loss: 0.0000009835383707\n",
      "Epoch: 16500/20000, Loss: 0.0000009841334077\n",
      "Epoch: 16510/20000, Loss: 0.0000010253037317\n",
      "Epoch: 16520/20000, Loss: 0.0000032216444197\n",
      "Epoch: 16530/20000, Loss: 0.0000125698134070\n",
      "Epoch: 16540/20000, Loss: 0.0000020416905500\n",
      "Epoch: 16550/20000, Loss: 0.0000026437219276\n",
      "Epoch: 16560/20000, Loss: 0.0000012199202502\n",
      "Epoch: 16570/20000, Loss: 0.0000011407192915\n",
      "Epoch: 16580/20000, Loss: 0.0000010093192486\n",
      "Epoch: 16590/20000, Loss: 0.0000010022557717\n",
      "Epoch: 16600/20000, Loss: 0.0000009863332480\n",
      "Epoch: 16610/20000, Loss: 0.0000009779971606\n",
      "Epoch: 16620/20000, Loss: 0.0000009730512147\n",
      "Epoch: 16630/20000, Loss: 0.0000009702702073\n",
      "Epoch: 16640/20000, Loss: 0.0000009682813698\n",
      "Epoch: 16650/20000, Loss: 0.0000009665360494\n",
      "Epoch: 16660/20000, Loss: 0.0000009650116226\n",
      "Epoch: 16670/20000, Loss: 0.0000009636427194\n",
      "Epoch: 16680/20000, Loss: 0.0000009664854588\n",
      "Epoch: 16690/20000, Loss: 0.0000013443608395\n",
      "Epoch: 16700/20000, Loss: 0.0000293732628052\n",
      "Epoch: 16710/20000, Loss: 0.0000025765759801\n",
      "Epoch: 16720/20000, Loss: 0.0000025431706945\n",
      "Epoch: 16730/20000, Loss: 0.0000017532455558\n",
      "Epoch: 16740/20000, Loss: 0.0000013094329461\n",
      "Epoch: 16750/20000, Loss: 0.0000010725342463\n",
      "Epoch: 16760/20000, Loss: 0.0000009812650887\n",
      "Epoch: 16770/20000, Loss: 0.0000009670442296\n",
      "Epoch: 16780/20000, Loss: 0.0000009622638117\n",
      "Epoch: 16790/20000, Loss: 0.0000009630070963\n",
      "Epoch: 16800/20000, Loss: 0.0000011188973303\n",
      "Epoch: 16810/20000, Loss: 0.0000075993166320\n",
      "Epoch: 16820/20000, Loss: 0.0000022968690701\n",
      "Epoch: 16830/20000, Loss: 0.0000031511178804\n",
      "Epoch: 16840/20000, Loss: 0.0000015331596614\n",
      "Epoch: 16850/20000, Loss: 0.0000009794213156\n",
      "Epoch: 16860/20000, Loss: 0.0000009592282595\n",
      "Epoch: 16870/20000, Loss: 0.0000009559446426\n",
      "Epoch: 16880/20000, Loss: 0.0000009473642990\n",
      "Epoch: 16890/20000, Loss: 0.0000009448528999\n",
      "Epoch: 16900/20000, Loss: 0.0000009455828831\n",
      "Epoch: 16910/20000, Loss: 0.0000009409279187\n",
      "Epoch: 16920/20000, Loss: 0.0000009405199535\n",
      "Epoch: 16930/20000, Loss: 0.0000009424692280\n",
      "Epoch: 16940/20000, Loss: 0.0000010052245898\n",
      "Epoch: 16950/20000, Loss: 0.0000036698677377\n",
      "Epoch: 16960/20000, Loss: 0.0000080800564319\n",
      "Epoch: 16970/20000, Loss: 0.0000028226645554\n",
      "Epoch: 16980/20000, Loss: 0.0000019164108380\n",
      "Epoch: 16990/20000, Loss: 0.0000010099482779\n",
      "Epoch: 17000/20000, Loss: 0.0000011215105360\n",
      "Epoch: 17010/20000, Loss: 0.0000009574290516\n",
      "Epoch: 17020/20000, Loss: 0.0000009326262784\n",
      "Epoch: 17030/20000, Loss: 0.0000009349463426\n",
      "Epoch: 17040/20000, Loss: 0.0000009310073779\n",
      "Epoch: 17050/20000, Loss: 0.0000009280008726\n",
      "Epoch: 17060/20000, Loss: 0.0000009262390108\n",
      "Epoch: 17070/20000, Loss: 0.0000009337229017\n",
      "Epoch: 17080/20000, Loss: 0.0000012479321185\n",
      "Epoch: 17090/20000, Loss: 0.0000151743524839\n",
      "Epoch: 17100/20000, Loss: 0.0000070932273957\n",
      "Epoch: 17110/20000, Loss: 0.0000012540929220\n",
      "Epoch: 17120/20000, Loss: 0.0000016800183857\n",
      "Epoch: 17130/20000, Loss: 0.0000009413955127\n",
      "Epoch: 17140/20000, Loss: 0.0000010392786862\n",
      "Epoch: 17150/20000, Loss: 0.0000009270364671\n",
      "Epoch: 17160/20000, Loss: 0.0000009252356108\n",
      "Epoch: 17170/20000, Loss: 0.0000009210393159\n",
      "Epoch: 17180/20000, Loss: 0.0000009260610341\n",
      "Epoch: 17190/20000, Loss: 0.0000011508067246\n",
      "Epoch: 17200/20000, Loss: 0.0000105992785393\n",
      "Epoch: 17210/20000, Loss: 0.0000043147797442\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 17220/20000, Loss: 0.0000019622773380\n",
      "Epoch: 17230/20000, Loss: 0.0000014661692376\n",
      "Epoch: 17240/20000, Loss: 0.0000011922990097\n",
      "Epoch: 17250/20000, Loss: 0.0000009471293652\n",
      "Epoch: 17260/20000, Loss: 0.0000009351663834\n",
      "Epoch: 17270/20000, Loss: 0.0000009162932315\n",
      "Epoch: 17280/20000, Loss: 0.0000009107487244\n",
      "Epoch: 17290/20000, Loss: 0.0000009043381510\n",
      "Epoch: 17300/20000, Loss: 0.0000009024349197\n",
      "Epoch: 17310/20000, Loss: 0.0000009083997270\n",
      "Epoch: 17320/20000, Loss: 0.0000011597778666\n",
      "Epoch: 17330/20000, Loss: 0.0000141397267726\n",
      "Epoch: 17340/20000, Loss: 0.0000076029400589\n",
      "Epoch: 17350/20000, Loss: 0.0000016660193296\n",
      "Epoch: 17360/20000, Loss: 0.0000019132273792\n",
      "Epoch: 17370/20000, Loss: 0.0000010038826304\n",
      "Epoch: 17380/20000, Loss: 0.0000010065155038\n",
      "Epoch: 17390/20000, Loss: 0.0000009313089322\n",
      "Epoch: 17400/20000, Loss: 0.0000008982401027\n",
      "Epoch: 17410/20000, Loss: 0.0000008953043675\n",
      "Epoch: 17420/20000, Loss: 0.0000008924193935\n",
      "Epoch: 17430/20000, Loss: 0.0000008897387147\n",
      "Epoch: 17440/20000, Loss: 0.0000008877414075\n",
      "Epoch: 17450/20000, Loss: 0.0000008900382227\n",
      "Epoch: 17460/20000, Loss: 0.0000011876791177\n",
      "Epoch: 17470/20000, Loss: 0.0000175976238097\n",
      "Epoch: 17480/20000, Loss: 0.0000029084189919\n",
      "Epoch: 17490/20000, Loss: 0.0000015134086198\n",
      "Epoch: 17500/20000, Loss: 0.0000010807012814\n",
      "Epoch: 17510/20000, Loss: 0.0000010232303111\n",
      "Epoch: 17520/20000, Loss: 0.0000009353001929\n",
      "Epoch: 17530/20000, Loss: 0.0000009071925433\n",
      "Epoch: 17540/20000, Loss: 0.0000008895138421\n",
      "Epoch: 17550/20000, Loss: 0.0000008827414604\n",
      "Epoch: 17560/20000, Loss: 0.0000009426705105\n",
      "Epoch: 17570/20000, Loss: 0.0000036557830754\n",
      "Epoch: 17580/20000, Loss: 0.0000062648632593\n",
      "Epoch: 17590/20000, Loss: 0.0000015198279470\n",
      "Epoch: 17600/20000, Loss: 0.0000020220352326\n",
      "Epoch: 17610/20000, Loss: 0.0000011817854784\n",
      "Epoch: 17620/20000, Loss: 0.0000009872254623\n",
      "Epoch: 17630/20000, Loss: 0.0000008786134345\n",
      "Epoch: 17640/20000, Loss: 0.0000008719472362\n",
      "Epoch: 17650/20000, Loss: 0.0000008714138175\n",
      "Epoch: 17660/20000, Loss: 0.0000008695578231\n",
      "Epoch: 17670/20000, Loss: 0.0000008667882412\n",
      "Epoch: 17680/20000, Loss: 0.0000008640312217\n",
      "Epoch: 17690/20000, Loss: 0.0000008626095109\n",
      "Epoch: 17700/20000, Loss: 0.0000008615728575\n",
      "Epoch: 17710/20000, Loss: 0.0000008694662483\n",
      "Epoch: 17720/20000, Loss: 0.0000013363036260\n",
      "Epoch: 17730/20000, Loss: 0.0000212897211895\n",
      "Epoch: 17740/20000, Loss: 0.0000033661110592\n",
      "Epoch: 17750/20000, Loss: 0.0000034598758702\n",
      "Epoch: 17760/20000, Loss: 0.0000010623602975\n",
      "Epoch: 17770/20000, Loss: 0.0000009898767530\n",
      "Epoch: 17780/20000, Loss: 0.0000009700867167\n",
      "Epoch: 17790/20000, Loss: 0.0000008590743619\n",
      "Epoch: 17800/20000, Loss: 0.0000008727025147\n",
      "Epoch: 17810/20000, Loss: 0.0000008549793620\n",
      "Epoch: 17820/20000, Loss: 0.0000008521956829\n",
      "Epoch: 17830/20000, Loss: 0.0000008533158393\n",
      "Epoch: 17840/20000, Loss: 0.0000009041287399\n",
      "Epoch: 17850/20000, Loss: 0.0000036451692722\n",
      "Epoch: 17860/20000, Loss: 0.0000041990674617\n",
      "Epoch: 17870/20000, Loss: 0.0000023761983812\n",
      "Epoch: 17880/20000, Loss: 0.0000015904259953\n",
      "Epoch: 17890/20000, Loss: 0.0000011211446918\n",
      "Epoch: 17900/20000, Loss: 0.0000009659311218\n",
      "Epoch: 17910/20000, Loss: 0.0000008696767964\n",
      "Epoch: 17920/20000, Loss: 0.0000008594382166\n",
      "Epoch: 17930/20000, Loss: 0.0000008500875310\n",
      "Epoch: 17940/20000, Loss: 0.0000008417213735\n",
      "Epoch: 17950/20000, Loss: 0.0000008392760833\n",
      "Epoch: 17960/20000, Loss: 0.0000008371787885\n",
      "Epoch: 17970/20000, Loss: 0.0000008355116847\n",
      "Epoch: 17980/20000, Loss: 0.0000008358728110\n",
      "Epoch: 17990/20000, Loss: 0.0000009233742730\n",
      "Epoch: 18000/20000, Loss: 0.0000086141235442\n",
      "Epoch: 18010/20000, Loss: 0.0000063602296905\n",
      "Epoch: 18020/20000, Loss: 0.0000013844390878\n",
      "Epoch: 18030/20000, Loss: 0.0000020488332666\n",
      "Epoch: 18040/20000, Loss: 0.0000013320773178\n",
      "Epoch: 18050/20000, Loss: 0.0000008821540405\n",
      "Epoch: 18060/20000, Loss: 0.0000008656759292\n",
      "Epoch: 18070/20000, Loss: 0.0000008429823311\n",
      "Epoch: 18080/20000, Loss: 0.0000008339904412\n",
      "Epoch: 18090/20000, Loss: 0.0000008272518812\n",
      "Epoch: 18100/20000, Loss: 0.0000008260086020\n",
      "Epoch: 18110/20000, Loss: 0.0000008238278610\n",
      "Epoch: 18120/20000, Loss: 0.0000008220051768\n",
      "Epoch: 18130/20000, Loss: 0.0000008206978919\n",
      "Epoch: 18140/20000, Loss: 0.0000008235432460\n",
      "Epoch: 18150/20000, Loss: 0.0000010740619700\n",
      "Epoch: 18160/20000, Loss: 0.0000190889804799\n",
      "Epoch: 18170/20000, Loss: 0.0000073883911682\n",
      "Epoch: 18180/20000, Loss: 0.0000026590005291\n",
      "Epoch: 18190/20000, Loss: 0.0000014039837879\n",
      "Epoch: 18200/20000, Loss: 0.0000010977967122\n",
      "Epoch: 18210/20000, Loss: 0.0000008428589808\n",
      "Epoch: 18220/20000, Loss: 0.0000008300783634\n",
      "Epoch: 18230/20000, Loss: 0.0000008214149148\n",
      "Epoch: 18240/20000, Loss: 0.0000008177488553\n",
      "Epoch: 18250/20000, Loss: 0.0000008113663625\n",
      "Epoch: 18260/20000, Loss: 0.0000008096563420\n",
      "Epoch: 18270/20000, Loss: 0.0000008076215181\n",
      "Epoch: 18280/20000, Loss: 0.0000008062395409\n",
      "Epoch: 18290/20000, Loss: 0.0000008055536682\n",
      "Epoch: 18300/20000, Loss: 0.0000008524961572\n",
      "Epoch: 18310/20000, Loss: 0.0000066287689151\n",
      "Epoch: 18320/20000, Loss: 0.0000051293918659\n",
      "Epoch: 18330/20000, Loss: 0.0000014242269799\n",
      "Epoch: 18340/20000, Loss: 0.0000015717297401\n",
      "Epoch: 18350/20000, Loss: 0.0000012678816574\n",
      "Epoch: 18360/20000, Loss: 0.0000009794571270\n",
      "Epoch: 18370/20000, Loss: 0.0000008265646443\n",
      "Epoch: 18380/20000, Loss: 0.0000008148256256\n",
      "Epoch: 18390/20000, Loss: 0.0000008081076430\n",
      "Epoch: 18400/20000, Loss: 0.0000007984857575\n",
      "Epoch: 18410/20000, Loss: 0.0000007969754279\n",
      "Epoch: 18420/20000, Loss: 0.0000007946579785\n",
      "Epoch: 18430/20000, Loss: 0.0000007930759693\n",
      "Epoch: 18440/20000, Loss: 0.0000007917150242\n",
      "Epoch: 18450/20000, Loss: 0.0000007907320878\n",
      "Epoch: 18460/20000, Loss: 0.0000008030393133\n",
      "Epoch: 18470/20000, Loss: 0.0000017914238697\n",
      "Epoch: 18480/20000, Loss: 0.0000222025792027\n",
      "Epoch: 18490/20000, Loss: 0.0000022090773655\n",
      "Epoch: 18500/20000, Loss: 0.0000018231838794\n",
      "Epoch: 18510/20000, Loss: 0.0000011789005612\n",
      "Epoch: 18520/20000, Loss: 0.0000009548343769\n",
      "Epoch: 18530/20000, Loss: 0.0000008808641496\n",
      "Epoch: 18540/20000, Loss: 0.0000007884774504\n",
      "Epoch: 18550/20000, Loss: 0.0000007957847288\n",
      "Epoch: 18560/20000, Loss: 0.0000007854501405\n",
      "Epoch: 18570/20000, Loss: 0.0000007819906500\n",
      "Epoch: 18580/20000, Loss: 0.0000007796446653\n",
      "Epoch: 18590/20000, Loss: 0.0000007782495004\n",
      "Epoch: 18600/20000, Loss: 0.0000007767212651\n",
      "Epoch: 18610/20000, Loss: 0.0000007755290312\n",
      "Epoch: 18620/20000, Loss: 0.0000007839310001\n",
      "Epoch: 18630/20000, Loss: 0.0000016170115487\n",
      "Epoch: 18640/20000, Loss: 0.0000175243221747\n",
      "Epoch: 18650/20000, Loss: 0.0000047841149353\n",
      "Epoch: 18660/20000, Loss: 0.0000017950202391\n",
      "Epoch: 18670/20000, Loss: 0.0000009746839851\n",
      "Epoch: 18680/20000, Loss: 0.0000007834401003\n",
      "Epoch: 18690/20000, Loss: 0.0000008059958532\n",
      "Epoch: 18700/20000, Loss: 0.0000007883465969\n",
      "Epoch: 18710/20000, Loss: 0.0000007791417715\n",
      "Epoch: 18720/20000, Loss: 0.0000007683856325\n",
      "Epoch: 18730/20000, Loss: 0.0000007662468420\n",
      "Epoch: 18740/20000, Loss: 0.0000007642679520\n",
      "Epoch: 18750/20000, Loss: 0.0000007626711067\n",
      "Epoch: 18760/20000, Loss: 0.0000007613435855\n",
      "Epoch: 18770/20000, Loss: 0.0000007630174537\n",
      "Epoch: 18780/20000, Loss: 0.0000011573882830\n",
      "Epoch: 18790/20000, Loss: 0.0000371167370758\n",
      "Epoch: 18800/20000, Loss: 0.0000021907087557\n",
      "Epoch: 18810/20000, Loss: 0.0000009547443369\n",
      "Epoch: 18820/20000, Loss: 0.0000009530851344\n",
      "Epoch: 18830/20000, Loss: 0.0000008550289294\n",
      "Epoch: 18840/20000, Loss: 0.0000008229625905\n",
      "Epoch: 18850/20000, Loss: 0.0000007955202364\n",
      "Epoch: 18860/20000, Loss: 0.0000007761549341\n",
      "Epoch: 18870/20000, Loss: 0.0000007613796811\n",
      "Epoch: 18880/20000, Loss: 0.0000007557008530\n",
      "Epoch: 18890/20000, Loss: 0.0000007544832670\n",
      "Epoch: 18900/20000, Loss: 0.0000007520850431\n",
      "Epoch: 18910/20000, Loss: 0.0000007506638440\n",
      "Epoch: 18920/20000, Loss: 0.0000007490914413\n",
      "Epoch: 18930/20000, Loss: 0.0000007476913311\n",
      "Epoch: 18940/20000, Loss: 0.0000007463244174\n",
      "Epoch: 18950/20000, Loss: 0.0000007450182693\n",
      "Epoch: 18960/20000, Loss: 0.0000007459098583\n",
      "Epoch: 18970/20000, Loss: 0.0000010228295650\n",
      "Epoch: 18980/20000, Loss: 0.0000234110157180\n",
      "Epoch: 18990/20000, Loss: 0.0000032469499729\n",
      "Epoch: 19000/20000, Loss: 0.0000019533074465\n",
      "Epoch: 19010/20000, Loss: 0.0000011776202200\n",
      "Epoch: 19020/20000, Loss: 0.0000008819606592\n",
      "Epoch: 19030/20000, Loss: 0.0000007955343335\n",
      "Epoch: 19040/20000, Loss: 0.0000007644861739\n",
      "Epoch: 19050/20000, Loss: 0.0000007427615287\n",
      "Epoch: 19060/20000, Loss: 0.0000007386611856\n",
      "Epoch: 19070/20000, Loss: 0.0000007362377801\n",
      "Epoch: 19080/20000, Loss: 0.0000007351301292\n",
      "Epoch: 19090/20000, Loss: 0.0000007335021905\n",
      "Epoch: 19100/20000, Loss: 0.0000007321676208\n",
      "Epoch: 19110/20000, Loss: 0.0000007365932788\n",
      "Epoch: 19120/20000, Loss: 0.0000011645149698\n",
      "Epoch: 19130/20000, Loss: 0.0000276718401437\n",
      "Epoch: 19140/20000, Loss: 0.0000036360122522\n",
      "Epoch: 19150/20000, Loss: 0.0000028517595183\n",
      "Epoch: 19160/20000, Loss: 0.0000016663962015\n",
      "Epoch: 19170/20000, Loss: 0.0000008207018709\n",
      "Epoch: 19180/20000, Loss: 0.0000007898304375\n",
      "Epoch: 19190/20000, Loss: 0.0000007719438599\n",
      "Epoch: 19200/20000, Loss: 0.0000007288373354\n",
      "Epoch: 19210/20000, Loss: 0.0000007310299566\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Epoch: 19220/20000, Loss: 0.0000007245807865\n",
      "Epoch: 19230/20000, Loss: 0.0000007232218309\n",
      "Epoch: 19240/20000, Loss: 0.0000007216282256\n",
      "Epoch: 19250/20000, Loss: 0.0000007201002745\n",
      "Epoch: 19260/20000, Loss: 0.0000007186721405\n",
      "Epoch: 19270/20000, Loss: 0.0000007173740642\n",
      "Epoch: 19280/20000, Loss: 0.0000007161379472\n",
      "Epoch: 19290/20000, Loss: 0.0000007158712947\n",
      "Epoch: 19300/20000, Loss: 0.0000007667448472\n",
      "Epoch: 19310/20000, Loss: 0.0000059262779359\n",
      "Epoch: 19320/20000, Loss: 0.0000051040060498\n",
      "Epoch: 19330/20000, Loss: 0.0000017696470422\n",
      "Epoch: 19340/20000, Loss: 0.0000017464599296\n",
      "Epoch: 19350/20000, Loss: 0.0000010580348544\n",
      "Epoch: 19360/20000, Loss: 0.0000008131853519\n",
      "Epoch: 19370/20000, Loss: 0.0000007264100077\n",
      "Epoch: 19380/20000, Loss: 0.0000007332649830\n",
      "Epoch: 19390/20000, Loss: 0.0000007105257964\n",
      "Epoch: 19400/20000, Loss: 0.0000007104301858\n",
      "Epoch: 19410/20000, Loss: 0.0000007066617513\n",
      "Epoch: 19420/20000, Loss: 0.0000007064429610\n",
      "Epoch: 19430/20000, Loss: 0.0000007564366342\n",
      "Epoch: 19440/20000, Loss: 0.0000056726498769\n",
      "Epoch: 19450/20000, Loss: 0.0000022195411020\n",
      "Epoch: 19460/20000, Loss: 0.0000033504359180\n",
      "Epoch: 19470/20000, Loss: 0.0000014242582438\n",
      "Epoch: 19480/20000, Loss: 0.0000009476675018\n",
      "Epoch: 19490/20000, Loss: 0.0000009019490790\n",
      "Epoch: 19500/20000, Loss: 0.0000007246045470\n",
      "Epoch: 19510/20000, Loss: 0.0000007105466011\n",
      "Epoch: 19520/20000, Loss: 0.0000007045998132\n",
      "Epoch: 19530/20000, Loss: 0.0000006993278134\n",
      "Epoch: 19540/20000, Loss: 0.0000006975050724\n",
      "Epoch: 19550/20000, Loss: 0.0000006953427487\n",
      "Epoch: 19560/20000, Loss: 0.0000006939592936\n",
      "Epoch: 19570/20000, Loss: 0.0000006925448020\n",
      "Epoch: 19580/20000, Loss: 0.0000006912296158\n",
      "Epoch: 19590/20000, Loss: 0.0000006899911114\n",
      "Epoch: 19600/20000, Loss: 0.0000006896180480\n",
      "Epoch: 19610/20000, Loss: 0.0000007478095085\n",
      "Epoch: 19620/20000, Loss: 0.0000082682290667\n",
      "Epoch: 19630/20000, Loss: 0.0000084588536993\n",
      "Epoch: 19640/20000, Loss: 0.0000019946653538\n",
      "Epoch: 19650/20000, Loss: 0.0000013701649095\n",
      "Epoch: 19660/20000, Loss: 0.0000009235298535\n",
      "Epoch: 19670/20000, Loss: 0.0000007317531185\n",
      "Epoch: 19680/20000, Loss: 0.0000006985781624\n",
      "Epoch: 19690/20000, Loss: 0.0000007038632361\n",
      "Epoch: 19700/20000, Loss: 0.0000006920101328\n",
      "Epoch: 19710/20000, Loss: 0.0000006848559337\n",
      "Epoch: 19720/20000, Loss: 0.0000006817318194\n",
      "Epoch: 19730/20000, Loss: 0.0000006807536579\n",
      "Epoch: 19740/20000, Loss: 0.0000006790892826\n",
      "Epoch: 19750/20000, Loss: 0.0000006778807915\n",
      "Epoch: 19760/20000, Loss: 0.0000006779521300\n",
      "Epoch: 19770/20000, Loss: 0.0000007295856221\n",
      "Epoch: 19780/20000, Loss: 0.0000049559675972\n",
      "Epoch: 19790/20000, Loss: 0.0000011503656197\n",
      "Epoch: 19800/20000, Loss: 0.0000040334462028\n",
      "Epoch: 19810/20000, Loss: 0.0000018142734461\n",
      "Epoch: 19820/20000, Loss: 0.0000008028990806\n",
      "Epoch: 19830/20000, Loss: 0.0000007801688184\n",
      "Epoch: 19840/20000, Loss: 0.0000007308511840\n",
      "Epoch: 19850/20000, Loss: 0.0000006828329333\n",
      "Epoch: 19860/20000, Loss: 0.0000006805648241\n",
      "Epoch: 19870/20000, Loss: 0.0000006709372542\n",
      "Epoch: 19880/20000, Loss: 0.0000006687544101\n",
      "Epoch: 19890/20000, Loss: 0.0000006673561757\n",
      "Epoch: 19900/20000, Loss: 0.0000006658700045\n",
      "Epoch: 19910/20000, Loss: 0.0000006645830126\n",
      "Epoch: 19920/20000, Loss: 0.0000006638453556\n",
      "Epoch: 19930/20000, Loss: 0.0000006760909628\n",
      "Epoch: 19940/20000, Loss: 0.0000014671808231\n",
      "Epoch: 19950/20000, Loss: 0.0000178701975528\n",
      "Epoch: 19960/20000, Loss: 0.0000019857300231\n",
      "Epoch: 19970/20000, Loss: 0.0000020422323814\n",
      "Epoch: 19980/20000, Loss: 0.0000012636169231\n",
      "Epoch: 19990/20000, Loss: 0.0000006914990536\n",
      "Epoch: 20000/20000, Loss: 0.0000007467037904\n"
     ]
    }
   ],
   "source": [
    "# Create LEM instance\n",
    "lem = LEM(input_size, hidden_size, output_size, dt=0.3)\n",
    "\n",
    "# Loss and optimizer\n",
    "criterion = nn.MSELoss()\n",
    "optimizer = torch.optim.Adam(lem.parameters(), lr=0.001)\n",
    "\n",
    "# Training loop\n",
    "for epoch in range(num_epochs):\n",
    "    # Forward pass\n",
    "    output = lem(input_tensor)\n",
    "    loss = criterion(output, target_tensor)\n",
    "\n",
    "    # Backward and optimize\n",
    "    optimizer.zero_grad()\n",
    "    loss.backward()\n",
    "    optimizer.step()\n",
    "\n",
    "    # Print progress\n",
    "    if (epoch + 1) % 10 == 0:\n",
    "        print(f'Epoch: {epoch + 1}/{num_epochs}, Loss: {loss.item():.16f}')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "1da66d64",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 1, 256])\n",
      "torch.Size([1, 20, 256])\n"
     ]
    }
   ],
   "source": [
    "print(test_tensor.shape)\n",
    "prediction_tensor = torch.zeros(1, 20, 256).float()\n",
    "print(prediction_tensor.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "a0543daa",
   "metadata": {},
   "outputs": [],
   "source": [
    "with torch.no_grad():\n",
    "    prediction = lem(test_tensor)\n",
    "    prediction = prediction.view(1, 1, 256).float()\n",
    "    prediction_tensor[:, 0, :] = prediction\n",
    "    for i in range(19):\n",
    "        prediction = lem(prediction)\n",
    "        prediction = prediction.view(1, 1, 256).float()\n",
    "        prediction_tensor[:, i+1, :] = prediction\n",
    "        "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2e6b9bad",
   "metadata": {},
   "source": [
    "### Four different types of error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "id": "9c33b0f5",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Exact Solution\n",
    "\n",
    "u_test = u_1.T\n",
    "u_test_full = u_test[80:100, :]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "00c8fa22",
   "metadata": {},
   "outputs": [],
   "source": [
    "prediction_tensor = torch.squeeze(prediction_tensor)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "id": "334bf0be",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "torch.Size([20, 256])"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Extrapolation\n",
    "\n",
    "k1 = ( prediction_tensor - u_test_full)**2\n",
    "u_test_full_tensor = torch.tensor(u_test_full**2)\n",
    "u_test_full_tensor.shape"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "01080c4f",
   "metadata": {},
   "source": [
    "### L^2 norm error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "33c17bd8",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Relative Error Test:  0.061881364236231876 %\n"
     ]
    }
   ],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(k1)/ torch.mean(u_test_full_tensor)\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test.item(), \"%\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "id": "c48b842d",
   "metadata": {},
   "outputs": [
    {
     "ename": "SyntaxError",
     "evalue": "invalid syntax (4209523232.py, line 1)",
     "output_type": "error",
     "traceback": [
      "\u001b[0;36m  File \u001b[0;32m\"/tmp/ipykernel_22426/4209523232.py\"\u001b[0;36m, line \u001b[0;32m1\u001b[0m\n\u001b[0;31m    2+\u001b[0m\n\u001b[0m      ^\u001b[0m\n\u001b[0;31mSyntaxError\u001b[0m\u001b[0;31m:\u001b[0m invalid syntax\n"
     ]
    }
   ],
   "source": [
    "2+"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "fa3fa35b",
   "metadata": {},
   "source": [
    "### Max absolute norm error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "01cf8637",
   "metadata": {},
   "outputs": [],
   "source": [
    "R_abs = torch.max(torch.abs(prediction_tensor - u_test_full))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b3e65482",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(R_abs)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "678810f2",
   "metadata": {},
   "source": [
    "### Explained variance score"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "02c72385",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "\n",
    "a = prediction_tensor\n",
    "b = u_test_full\n",
    "# Assuming 'a' is your predicted values (model's predictions) and 'b' is the true values (ground truth)\n",
    "# Make sure 'a' and 'b' are PyTorch tensors\n",
    "# a = torch.tensor(a)\n",
    "b = torch.tensor(b)\n",
    "# Calculate the mean of 'b'\n",
    "mean_b = torch.mean(b)\n",
    "\n",
    "# Calculate the Explained Variance Score\n",
    "numerator = torch.var(b - a)  # Variance of the differences between 'b' and 'a'\n",
    "denominator = torch.var(b)    # Variance of 'b'\n",
    "evs = 1 - numerator / denominator\n",
    "\n",
    "print(\"Explained Variance Score:\", evs.item())"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "f664baf6",
   "metadata": {},
   "source": [
    "### Mean absolute error"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "43fc2394",
   "metadata": {},
   "outputs": [],
   "source": [
    "# Compute the relative L2 error norm (generalization error)\n",
    "relative_error_test = torch.mean(torch.abs(prediction_tensor - u_test_full))\n",
    "\n",
    "print(\"Relative Error Test: \", relative_error_test, \"%\")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "75e50e9e",
   "metadata": {},
   "source": [
    "### Contour plot for PINN (80 percent) and (20 percentage lem prediction)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8e3eec75",
   "metadata": {},
   "outputs": [],
   "source": [
    "print(prediction_tensor.shape)\n",
    "prediction_tensor = torch.squeeze(prediction_tensor)\n",
    "input_tensor = torch.squeeze(input_tensor)\n",
    "\n",
    "conc_u = torch.squeeze(input_tensor)\n",
    "concatenated_tensor = torch.cat((conc_u, prediction_tensor), dim=0)\n",
    "\n",
    "x1 = np.linspace(-1, 1, 256)\n",
    "t1 = np.linspace(0, 1, 99)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "e393a1e0",
   "metadata": {},
   "source": [
    "### Snapshot time plots"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "04f91104",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[3, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, 83].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.83}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('LEM_0.83_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.83_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "3d96305e",
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import numpy as np\n",
    "import torch\n",
    "\n",
    "# Create the figure and axis objects with reduced width\n",
    "fig, ax = plt.subplots(figsize=(5, 5))  # You can adjust the width (7 inches) and height (5 inches) as needed\n",
    "\n",
    "\n",
    "\n",
    "final_time_output = prediction_tensor[-2, :]\n",
    "final_out = final_time_output.detach().numpy().reshape(-1, 1)\n",
    "final_true = u_1[:, -2].reshape(-1, 1)\n",
    "\n",
    "# Plot the data with red and blue lines, one with dotted and one with solid style\n",
    "ax.plot(x, final_out, color='red', linestyle='dotted', linewidth=12, label='Prediction')\n",
    "ax.plot(x, final_true, color='blue', linestyle='solid', linewidth=7, label='True')\n",
    "\n",
    "\n",
    "# Set the axis labels with bold font weight\n",
    "ax.set_xlabel(r\"${x}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "ax.set_ylabel(r\"${u(x, t)}$\", fontsize=26, color='black', fontdict={'weight': 'bold'})\n",
    "\n",
    "# Set the title with bold font weight\n",
    "ax.set_title(r\"${t = 0.98}$\", fontsize=26, color='black', fontweight='bold')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 3\n",
    "ax.set_xticks([-1, 0, 1])\n",
    "ax.set_yticks([-1, 0, 1])\n",
    "\n",
    "# Set tick labels fontweight to bold and increase font size\n",
    "ax.tick_params(axis='both', which='major', labelsize=20, width=2, length=10)\n",
    "\n",
    "# # Set the fontweight for tick labels to bold\n",
    "# for tick in ax.get_xticklabels() + ax.get_yticklabels():\n",
    "#     tick.set_weight('bold')\n",
    "\n",
    "# Set the spines linewidth to bold\n",
    "ax.spines['top'].set_linewidth(2)\n",
    "ax.spines['right'].set_linewidth(2)\n",
    "ax.spines['bottom'].set_linewidth(2)\n",
    "ax.spines['left'].set_linewidth(2)\n",
    "\n",
    "# Set the legend\n",
    "# ax.legend()\n",
    "\n",
    "plt.savefig('LEM_0.98_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "#plt.savefig('lem_0.98_20.png', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d962cd38",
   "metadata": {},
   "source": [
    "### Contour plot where 80 percent for PINN solution and 20 percent for lem solution"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "5011fef9",
   "metadata": {},
   "source": [
    "### Exact contour"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "8d6ac2bb",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = u_1.T\n",
    "\n",
    "# Define custom color levels\n",
    "x = np.linspace(-1, 1, concatenated_array.shape[1])  # Replace 0 and 1 with your actual x range\n",
    "t = np.linspace(0, 1, concatenated_array.shape[0])  # Replace 0 and 1 with your actual t range\n",
    "X, T = np.meshgrid(x, t)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 400)\n",
    "\n",
    "# Plot the contour with interpolated data\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.pcolormesh(T, X, concatenated_array, shading='auto', cmap='coolwarm')\n",
    "\n",
    "# Set the fontweight for axis labels to regular (not bold)\n",
    "plt.xlabel(\"$t$\", fontsize=26)\n",
    "plt.ylabel(\"$x$\", fontsize=26)\n",
    "plt.title(\"$u(x, t)$\", fontsize=26)\n",
    "\n",
    "# Set tick labels fontweight to regular (not bold) and increase font size\n",
    "plt.tick_params(axis='both', which='major', labelsize=20, width=3, length=10)\n",
    "\n",
    "# Set the fontweight for tick labels to regular (not bold)\n",
    "for tick in plt.gca().get_xticklabels() + plt.gca().get_yticklabels():\n",
    "    tick.set_weight('normal')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "\n",
    "cbar1 = plt.colorbar()\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "# Set the fontweight and fontsize for color bar tick labels\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_weight('normal')\n",
    "    t.set_fontsize(26)  # Increase the font size for color bar tick labels\n",
    "\n",
    "# Increase the size of numbers on axis and color bar\n",
    "plt.xticks(fontsize=26)\n",
    "plt.yticks(fontsize=26)\n",
    "\n",
    "# Increase the tick size and width of the color bar\n",
    "cbar1.ax.tick_params(axis='both', which='major', labelsize=30, width=3,  length=10)\n",
    "\n",
    "#plt.savefig('Contour_Exact.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "plt.savefig('contour_exact.jpeg', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "c034dcf7",
   "metadata": {},
   "outputs": [],
   "source": [
    "import torch\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt\n",
    "from matplotlib.ticker import FixedLocator\n",
    "\n",
    "# Assuming you have defined concatenated_tensor as a PyTorch tensor\n",
    "# concatenated_tensor = torch.cat((tensor1, tensor2), dim=0)\n",
    "\n",
    "# Convert concatenated_tensor to a NumPy array\n",
    "concatenated_array = concatenated_tensor.numpy()\n",
    "\n",
    "# Define custom color levels\n",
    "x = np.linspace(-1, 1, concatenated_array.shape[1])  # Replace 0 and 1 with your actual x range\n",
    "t = np.linspace(0, 1, concatenated_array.shape[0])  # Replace 0 and 1 with your actual t range\n",
    "X, T = np.meshgrid(x, t1)\n",
    "\n",
    "# Define custom color levels using the minimum and maximum from the NumPy array\n",
    "c_levels = np.linspace(np.min(concatenated_array), np.max(concatenated_array), 400)\n",
    "\n",
    "# Plot the contour with interpolated data\n",
    "plt.figure(figsize=(20, 5))\n",
    "plt.pcolormesh(T, X, concatenated_array, shading='auto', cmap='coolwarm')\n",
    "\n",
    "# Set the fontweight for axis labels to regular (not bold)\n",
    "plt.xlabel(\"$t$\", fontsize=26)\n",
    "plt.ylabel(\"$x$\", fontsize=26)\n",
    "plt.title(\"$u(x, t)$\", fontsize=26)\n",
    "\n",
    "# Set tick labels fontweight to regular (not bold) and increase font size\n",
    "plt.tick_params(axis='both', which='major', labelsize=20, width=3, length=10)\n",
    "\n",
    "# Set the fontweight for tick labels to regular (not bold)\n",
    "for tick in plt.gca().get_xticklabels() + plt.gca().get_yticklabels():\n",
    "    tick.set_weight('normal')\n",
    "\n",
    "# Set the number of ticks for x-axis and y-axis to 5\n",
    "num_ticks = 5\n",
    "x_ticks = np.linspace(np.min(T), np.max(T), num_ticks)\n",
    "y_ticks = np.linspace(np.min(X), np.max(X), num_ticks)\n",
    "\n",
    "plt.gca().xaxis.set_major_locator(FixedLocator(x_ticks))\n",
    "plt.gca().yaxis.set_major_locator(FixedLocator(y_ticks))\n",
    "\n",
    "cbar1 = plt.colorbar()\n",
    "# Set the number of ticks for the color bar with uniformly distributed numbers\n",
    "num_ticks = 5\n",
    "c_ticks = np.linspace(np.min(concatenated_array), np.max(concatenated_array), num_ticks)\n",
    "cbar1.set_ticks(c_ticks)\n",
    "\n",
    "# Set the fontweight and fontsize for color bar tick labels\n",
    "for t in cbar1.ax.get_yticklabels():\n",
    "    t.set_weight('normal')\n",
    "    t.set_fontsize(26)  # Increase the font size for color bar tick labels\n",
    "\n",
    "# Increase the size of numbers on axis and color bar\n",
    "plt.xticks(fontsize=26)\n",
    "plt.yticks(fontsize=26)\n",
    "\n",
    "# Increase the tick size and width of the color bar\n",
    "cbar1.ax.tick_params(axis='both', which='major', labelsize=30, width=3,  length=10)\n",
    "\n",
    "# Add a dotted line at t = 0.8\n",
    "plt.axvline(x=0.8, color='black', linestyle='dotted', linewidth=5)\n",
    "\n",
    "#plt.savefig('Contour_LEM_20.pdf', dpi=500, bbox_inches=\"tight\")\n",
    "plt.savefig('contour_LEM_20.jpeg', dpi=500, bbox_inches=\"tight\")\n",
    "# Show the plot\n",
    "plt.show()\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "b7ab04a2",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3 (ipykernel)",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
